首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建ActiveX控件CommandButton并将其设置为Excel VBA变量

如何创建ActiveX控件CommandButton并将其设置为Excel VBA变量
EN

Stack Overflow用户
提问于 2018-12-20 01:08:04
回答 1查看 1.1K关注 0票数 4

我正在尝试用Excel VBA创建一个新的ActiveX控件CommandButton。我有一个循环VBA,它在过去工作过,File1.1.xlsm有工作簿的主列表。我需要向大约3200个工作簿添加一个CommandButton,因此我将使用Do-Loop宏。这是供参考的循环代码。

代码语言:javascript
运行
复制
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/属性,并希望稍后为按钮添加一个宏。

代码语言:javascript
运行
复制
    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‘是在正确的位置创建的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-20 01:30:01

OLEObjects.Add创建一个OLEObject并将其添加到OLEObjects集合中;Add函数返回的对象是OLEObject,而不是MSForm.CommandButton。这是OLEObject.Object的底层类型-因此,将buttonControl设置为返回对象的.Object属性:

代码语言:javascript
运行
复制
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了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53856080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档