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

时间:2012-09-02 15:55:58

标签: 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

在名为MyModule的模块中定义。此代码按预期工作:第一次执行后'MyModule.n'的值为5.执行第二次后,它的值为10,依此类推。

当我扩展代码时,要添加一个CommandButton并将其放在工作表上,全局变量MyModule.nFoo的每次新调用中都会丢失它的值:

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

对于第一个示例,您不需要使用for next循环。你为什么不这样做:

Public n As Integer

Public Sub Foo()

    MyModule.n = 5


End Sub

这将在一次操作中完成。

在第二个示例中,您不添加一个按钮,而是添加其中的一个按钮。检查“下一步”的帮助。