我正在尝试用Excel VBA创建一个新的ActiveX控件CommandButton。我有一个循环VBA,它在过去工作过,File1.1.xlsm有工作簿的主列表。我需要向大约3200个工作簿添加一个CommandButton,因此我将使用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
我希望将按钮设置为变量(我想),这样我就可以编辑formatting/属性,并希望稍后为按钮添加一个宏。
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‘是在正确的位置创建的。
发布于 2018-12-20 01:30:01
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
块就可以只是With buttonControl
了。
https://stackoverflow.com/questions/53856080
复制相似问题