我有这段简短的代码
Public n As Integer
Public Sub Foo()
For i = 0 To 4
MyModule.n = MyModule.n + 1
Next i
End Sub
在名为MyModule
的模块中定义。此代码按预期工作:第一次执行后'MyModule.n'的值为5.执行第二次后,它的值为10,依此类推。
当我扩展代码时,要添加一个CommandButton并将其放在工作表上,全局变量MyModule.n
在Foo
的每次新调用中都会丢失它的值:
Public n As Integer
Public Sub Foo()
Dim btn As OLEObject
For i = 0 To 4
Set btn = Worksheets("Aufträge").OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Left:=122, Top:=321, Width:=30, Height:=30)
MyModule.n = MyModule.n + 1
Next i
End Sub
代码似乎有效,因为命令按钮已创建并正确放置。为什么在执行第二个代码片段时全局变量会重置?
此外,我不能在第二个代码片段中的For-Loop之后或之内放置一个断点。我收到了消息Can't enter break mode at this time
。
答案 0 :(得分:8)
基于我做过的搜索&我的结论是,您无法动态地向工作表添加控件并保留变量的状态。
原因如下:添加按钮将强制表格转到设计模式&因此重置变量。
支持链接
答案 1 :(得分:0)
对于第一个示例,您不需要使用for next循环。你为什么不这样做:
Public n As Integer
Public Sub Foo()
MyModule.n = 5
End Sub
这将在一次操作中完成。
在第二个示例中,您不添加一个按钮,而是添加其中的一个按钮。检查“下一步”的帮助。