首页 > 解决方案 > 如何使用 Excel VBA 为动态创建的对象分配引用

问题描述

有一些类似问题的答案,但没有一个对我有用。它们中的大多数都面向表单,而我正在尝试将对象直接添加到 Excel 工作表中。除此之外,对于不应该那么困难的事情,几乎所有的解决方案都非常复杂。

这是我正在寻找的简单的东西 - 但我需要它用于 ToggleButton 和 ComboBox。下面的代码适用于 CommandButton,但据我所知,它似乎没有其他 ActiveX 对象类型的模拟。

Sub AddButtons()
    Dim ws As Excel.Worksheet
    Dim btn As Button

    For Each ws In ThisWorkbook.Worksheets
        Set btn = ws.Buttons.Add(10, 20, 30, 40)
        Debug.Print ws.Name
        ' MySub_[worksheet name] will be executed when btn is clicked
        btn.OnAction = "MySub_" & ws.Name
        btn.Caption = ws.Name
        ' Set additional btn properties as needed
    Next ws
End Sub

(我实际上并没有尝试为每个工作表创建一个对象,但此示例显示了如何循环遍历某些构造并将自定义代码绑定到每次迭代中创建的对象。)

谢谢!

标签: excelvba

解决方案


Activex 控件是 OLEObjects。我在下面展示了如何添加复选框。

Sub AddButtons()
    Dim ws As Worksheet
    Dim btn As OLEObject
    Debug.Print ("Start")
    For Each ws In ThisWorkbook.Worksheets
        Set btn = ws.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=True, _
        DisplayAsIcon:=False, left:=10, top:=10, width:=20, _
        height:=20)
        Debug.Print (ws.Name)
    Next ws
End Sub

推荐阅读