gpt4 book ai didi

excel - 在特定代码行备份+恢复 IDE 书签

转载 作者:行者123 更新时间:2023-12-04 22:29:15 24 4
gpt4 key购买 nike

好吧,标题是因为我很难浏览一些难以忍受的文档并找到我正在寻找的东西,如果这些关键字可以帮助其他谷歌搜索......

然后,当退出 Excel 时,所有之前标记的代码行都丢失了,当你不得不去 sleep 或 Excel 崩溃时,这非常令人沮丧:)

所以,在一个纯粹的疯狂时刻,我认为有可能,甚至不是太难,只保存那些行书签并在启动时恢复它们......

你会告诉我还有其他选择:不要 sleep .. 或者使用一些强大的插件,如 MZ-Tools 或 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

将光标放在第二个 test_addBmk 内,运行,你会看到一个漂亮的青蓝色标记出现在第 5 行的“模块 2”的边缘,但仅此而已,没有其他地方。

我很好地尝试在 AddBmkOnly 中添加这种行保持焦点/事件状态,但没有效果:
With Application.VBE.VBProjects("VBAProject").VBComponents(CompName)
.Activate
.CodeModule.CodePane.Window.SetFocus
.CodeModule.VBE.ActiveCodePane.Show
'...?
end with

我尝试添加一些 DoEvents , Debug.Print , 循环到 1M 或者想看看它是否是由于一些延迟/刷新效果,但也没有效果。

它可能与模块或代码 Pane 窗口的事件状态有关,但我找不到有效的组合(另外,关闭最后一个 Pane - .ActiveCodePane.Window.Close - 也会避免添加书签)。

在添加 anchor 之前似乎也失去了焦点,无论我尝试什么,或者“添加书签”菜单操作看不到在哪里应用......或者它是别的东西......

调用 test_addBmk()多次也不起作用,我发现的唯一方法是在 Excel 工作表中创建“一个操作”按钮,与我需要的书签数量一样多……这不好笑。

我究竟做错了什么?我正在尝试的方式甚至可能吗?如何添加多个书签?

最佳答案

您需要在调用菜单项之前激活代码 Pane :

Public Sub AddBmkOnly(ByVal CompName As String, ByVal numLine As Long)
Dim editor As VBE
Dim project As VBProject
Dim component As VBComponent

Set editor = Application.VBE
Set project = Application.VBE.VBProjects("VBAProject")
Set component = project.VBComponents(CompName)
component.CodeModule.CodePane.SetSelection numLine, 1, numLine, 1
component.Activate
Application.VBE.CommandBars("Edit").Controls("&Toggle Bookmark").Execute 'the only way I could find it to work... almost[*]
End Sub

请注意,如果您尝试在调试器中单步执行它,这将不起作用,因为每次单步执行都会将事件 Pane 设置回您正在执行的代码。

其他几点注意事项:
  • 您应该在尝试设置选择之前测试代码行数 - 如果 numLine高于模块中的代码行数,这是应用程序错误。
  • Call应该被视为已弃用 - 绝对没有理由使用它。
  • 您应该避免在 Controls 中对索引进行硬编码。集合 - 其他插件可以修改这些,所以谁知道你会得到什么。
  • 谢谢你提到橡皮鸭! (我是投稿人)
  • 关于excel - 在特定代码行备份+恢复 IDE 书签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54715812/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com