excel - 如何创建 ActiveX 控件命令按钮并将其设置为变量 Excel VBA
问题描述
我正在尝试使用 Excel VBA 创建一个新的 ActiveX 控件命令按钮。我有一个过去工作过的循环 VBA,theFile1.1.xlsm 有工作簿的主列表。我需要向 ~3200 个工作簿添加一个命令按钮,所以我将使用 Do-Loop 宏。这是供参考的循环代码。
Sub Macro2()
Application.ScreenUpdating = False
Dim sFile As String
Dim wb As Workbook
Dim FileName1 As String
Dim FileName2 As String
Dim wksSource As Worksheet
Const scWkbSourceName As String = "theFILE 1.1.xlsm"
Set wkbSource = Workbooks(scWkbSourceName)
Set wksSource = wkbSource.Sheets("Sheet1") ' Replace 'Sheet1' w/ sheet name of SourceSheet
Const wsOriginalBook As String = "theFILE 1.1.xlsm"
Const sPath As String = "E:\ExampleFolder\"
SourceRow = 5
Do While Cells(SourceRow, "D").Value <> ""
Sheets("Sheet1").Select
FileName1 = wksSource.Range("A" & SourceRow).Value
FileName2 = wksSource.Range("K" & SourceRow).Value
sFile = sPath & FileName1 & "\" & FileName2 & ".xlsm"
Set wb = Workbooks.Open(sFile)
''insert code for loop operation
'''CLOSE WORKBOOK W/O BEFORE SAVE
Application.EnableEvents = False
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.EnableEvents = True
SourceRow = SourceRow + 1
Loop
End Sub
我想将按钮设置为变量(我认为),这样我就可以编辑格式/属性,并希望稍后为按钮添加一个宏。
Dim buttonControl As MSForms.CommandButton
Set buttonControl = _
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, _
DisplayAsIcon:=False, _
Left:=1464, Top:=310, Width:=107.25, Height:=30)
With buttonControl.Opject
.Caption = "OPEN FOLDER"
.Name = "cmd_OPEN_FOLDER"
End With
我有一个“运行时错误 13:类型不匹配”错误。我不确定为什么,因为在正确的位置创建了一个“CommandButton1”。
解决方案
OLEObjects.Add
创建一个OLEObject
并将其添加到OLEObjects
集合中;函数返回的对象Add
是OLEObject
,不是MSForm.CommandButton
。那是OLEObject.Object
- 所以,将你设置为返回对象buttonControl
的属性:.Object
Set buttonControl = _
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, _
DisplayAsIcon:=False, _
Left:=1464, Top:=310, Width:=107.25, Height:=30).Object
该按钮是在正确的位置创建的,因为该Add
函数工作并返回 - 类型不匹配导致的失败是将返回的分配OLEObject
到CommandButton
变量中,在该操作之后立即。
随后的With
块可以是 just With buttonControl
。
推荐阅读
- excel - 在多维数组中插入数据
- python - 我如何在linux的执行命令函数中使用python程序中存在的变量
- python - 如果我不知道该值属于哪一列,如何选择具有特定值的行?
- android - 插页式 AdMob 在关闭后打开
- php - $_Session[variable] 在代码中的位置
- python - import-im6.q16: 未授权错误 'os' @error/constitue.c/WriteImage/1037 用于 Python 网络爬虫
- php - 使用 PHP Laravel 从 MySQL 中的多个表中搜索数据
- c# - 如何从 wpf 的列表视图中获取未选择的项目
- javascript - 如何删除服务器上的文件?FilePond.revert 不向 laravel 控制器传递参数
- node.js - 每次页面加载都会调用我的访客计数器 2 次