Как создать и установить ActiveX Control CommandButton в качестве переменной Excel VBA - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь создать новую командную кнопку управления ActiveX с помощью Excel VBA.У меня есть цикл VBA, который работал в прошлом, theFile1.1.xlsm имеет основной список рабочих книг.Мне нужно добавить CommandButton к ~ 3200 рабочим книгам, поэтому я буду использовать макрос Do-Loop.Вот код 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' создан в правильном месте.

1 Ответ

0 голосов
/ 19 декабря 2018

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...