添加带代码的命令按钮时,全局变量会重置

mar*_*man 2 excel vba excel-vba

我有这么短的代码

Public n As Integer

Public Sub Foo()

    For i = 0 To 4

        MyModule.n = MyModule.n + 1

    Next i

End Sub
Run Code Online (Sandbox Code Playgroud)

它在名为的模块中定义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
Run Code Online (Sandbox Code Playgroud)

代码似乎有效,因为命令按钮已创建并正确放置.为什么在执行第二个代码片段时全局变量会重置?

此外,我不能在第二个代码片段中的For-Loop之后或之内放置一个断点.我收到了消息Can't enter break mode at this time.

sha*_*esh 8

基于我的搜索和我的结论是你不能动态地向工作表添加控件并保留变量的状态.

原因如下:添加按钮将强制工作表转到设计模式,从而重置变量.

支持链接

  1. http://www.pcreview.co.uk/forums/dynamically-adding-activex-controls-via-vba-kills-global-vba-heap-t3763287p2.html

  2. https://web.archive.org/web/20101215134333/http://support.microsoft.com/kb/231089 (最初为/support.microsoft.com/kb/231089)

  • 根据这些信息,@ elastprime可以将计数器存储在工作表单元格或工作表CustomProperty中. (2认同)