gpt4 book ai didi

vba - 模块变量在 CodeModule.InsertLines 调用后无法存活

转载 作者:行者123 更新时间:2023-12-02 12:12:21 26 4
gpt4 key购买 nike

我正在尝试在运行时向工作表添加一个按钮。该按钮应该只显示在运行时创建的不同工作表。我添加了这样的按钮:

Dim btnShowTable
Set btnShowTable = ActiveSheet.Buttons.Add(rowRange.Left + 10, rowRange.Top + 10, rowRange.Width - 20, rowRange.Height - 20)
btnShowTable.Caption = "Show table data"
btnShowTable.OnAction = AddClickHandler_ShowSheet("ClickModule", "TableView", tableSheet)


Function AddClickHandler_ShowSheet(ByVal moduleName As String, ByVal btnName As String, ws As Worksheet)
Dim methodName As String
methodName = btnName & "_" & AddClickHandler_GetId() & "_Click"
Dim LineNum As Long
Dim VBCodeMod As CodeModule
Set VBCodeMod = ThisWorkbook.VBProject.VBComponents(moduleName).CodeModule
With VBCodeMod
LineNum = .CountOfLines + 1
.InsertLines LineNum, _
"Sub " & methodName & "()" & Chr(13) & _
" " & ws.CodeName & ".Select" & Chr(13) & _
"End Sub"
End With
AddClickHandler_ShowSheet = moduleName & "." & methodName
End Function

创建按钮的函数位于一个模块中,而 AddClickHandler_ShowSheet 位于另一个模块中。

我的想法是,我将有一个单独的模块,其中包含所有这些点击处理程序,以便我可以轻松删除所有它们。这工作正常。处理程序已创建,按钮按预期工作。我遇到的问题是,当调用此 InsertLines 方法时,包含按钮创建函数的模块中的所有模块变量都会丢失。我有 4 个模块变量

Dim xmldoc As New MSXML2.DOMDocument
Dim xmlDataMap() As DataNode
Dim xmlDataMapLast As Integer
Dim xmlTables As Collection

调用 InsertLines 后,除了包含正确值 14 的 xmlDataMapLast 之外,所有这些都变为空。

如果我在跨过 InserLines 调用时尝试调试此方法,则会收到错误“此时无法进入中断模式”。在我的函数结束之前我无法调试任何东西。如果我注释掉对 AddClickHandler_ShowSheet 的调用,我的变量将保持不变,因此它一定与该调用相关。

我是在尝试实现不可能的目标,还是只是以错误的方式实现?

最佳答案

模块重置并不奇怪。
事实上,我希望值类型也能重置。是有点意外他们生存下来。

为什么需要在用于代码生成的模块中存储变量?
将它们存储在单独的模块中,并且仅使用该模块来生成代码。

<小时/>

话虽如此,为什么首先要动态添加代码?
OnAction 支持参数:

Sub asdff()
Worksheets(1).Buttons(1).OnAction = "'Module1.ParametrizedHandler 5, ""Hi there""'"
End Sub

Public Sub ParametrizedHandler(ByVal foo As Long, ByVal bar As String)
MsgBox foo, vbInformation, bar
End Sub

请注意调用字符串中没有括号及其周围的单引号。

关于vba - 模块变量在 CodeModule.InsertLines 调用后无法存活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6089178/

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