excel - 如何使用 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
(我实际上并没有尝试为每个工作表创建一个对象,但此示例显示了如何循环遍历某些构造并将自定义代码绑定到每次迭代中创建的对象。)
谢谢!
解决方案
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
推荐阅读
- seo - 打开图形描述元标记在 LinkedIn 中不起作用
- powershell - 将已发送的电子邮件复制到已发送文件夹(电子邮件服务器)
- r - 在 `googlesheets` 中使用来自 `googleAuthR` 的令牌
- azure - Velero 部署失败 - 无法找到 Azure /credentials/cloud 文件
- python - 尝试使用 catch 验证 Python 中的输入
- tfs - TFS 2013 团队构建 - 排队构建保持进行中状态
- ansible - 使用 ansible inventory_hostname 模式匹配字母数字
- r - 循环通过按列变量分组的函数
- java - OpenJDK 11.0.4 在类路径中有 java-atk-wrapper.jar
- python - 在 openpyxl 包中我可以在哪里找到 load_workbook() 功能?