Ну, название таково, потому что мне было трудно пройтись по некоторым невыносимым документам и найти то, что я искал, поэтому, если эти ключевые слова могут помочь для других поисков в Google ...
Затем, при выходеExcel, все ранее отмеченные строки кода потеряны, и это очень расстраивает, когда вам нужно идти спать или Excel вылетает:)
Итак, в момент чистого безумия я подумал, что это возможно, и дажене слишком сложно, просто сохранить эти линейные закладки и восстановить их при запуске ...
Вы скажете мне, что есть другие варианты: не спать ... или использовать некоторые мощные надстройки, такие как MZ-Инструменты или Rubberduck, но я хотел бы иметь собственное решение и понять, в чем проблема.
Чтобы сократить до краев, вот суть моей проблемы:
'sub to move cursor to a selected line and add a line bookmark:
Public Sub AddBmkOnly(ByVal CompName As String, ByVal numLine As Long)
Application.VBE.VBProjects("VBAProject") _
.VBComponents(CompName).CodeModule.CodePane _
.SetSelection numLine, 1, numLine, 1
Application.VBE.CommandBars("Edit").Controls(18).Controls(1).Execute 'the only way I could find it to work
End Sub
Чтопроисходит:
1) работает только один вызов!
Public Sub test_addBmk()
Call AddBmkOnly("module 1", 10)
End Sub
2) если их больше, или в цикле, например:
Public Sub test_addBmk()
Call AddBmkOnly("module 1", 10) 'cursor is just moved to selected line
Call AddBmkOnly("module 2", 5) 'line bookmark is added only in the last opened/activated/selected/visible/shown/focused on..? codepane
'...
End Sub
Placeкурсор внутри 2 test_addBmk
, беги и будешьвижу красивую голубую синюю отметку, появляющуюся на полях вашего «модуля 2» в строке 5, но это все, не где еще.
Я хорошо постарался добавить такие строки в AddBmkOnly
, чтобы сохранить фокус /активное состояние, но оно не оказывает влияния:
With Application.VBE.VBProjects("VBAProject").VBComponents(CompName)
.Activate
.CodeModule.CodePane.Window.SetFocus
.CodeModule.VBE.ActiveCodePane.Show
'...?
end with
Я пытался добавить цикл DoEvents
, Debug.Print
к 1M или мне нравится видеть, было ли это из-за некоторого эффекта задержки / обновления, но нетлибо эффект.
Это может быть связано с активным состоянием окна модуля или окна кодовой панели, но я не могу найти рабочую комбинацию (также закрытие последней панели - .ActiveCodePane.Window.Close
- позволит избежатьзакладка тоже будет добавлена).
Кажется также, что фокус теряется перед добавлением привязки, что бы я ни пытался, или действие меню «добавить закладку» не видит, где применить ....или это что-то еще ...
Вызов test_addBmk()
несколько раз не работает ни один, единственный способ, который я нашел, - это создание кнопок «одно действие» на листе Excel, столько же, сколько количество закладокМне нужно ... это не смешно.
Что зая не так делаю?Это вообще возможно, как я пытаюсь?Как я могу добавить более одной закладки?