全局variables在添加带有代码的命令button时重置
我有这段简短的代码
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并将其放在工作表上,全局variablesMyModule.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
该代码似乎工作,因为命令button被创build并正确放置。 为什么执行第二个代码片段时全局variables复位?
此外,我不能在第二个代码片段的For循环之后或之内放置一个断点。 我收到消息此时Can't enter break mode at this time
。
基于search我做了我的结论是,你不能dynamic地添加控件到工作表并保留variables的状态。
这是为什么:添加button将强制工作表转到devise模式,从而重置variables。
支持链接
第一个例子你不需要使用下一个循环。 你为什么不这样做:
Public n As Integer Public Sub Foo() MyModule.n = 5 End Sub
这将在一个操作中做到这一点。
在第二个例子中,你不需要添加一个button,你可以添加5个button。 检查“For Next”的帮助。