簡體   English   中英

VBA Excel 2010-如何將宏分配給使用宏創建的命令按鈕

[英]VBA Excel 2010 - How to assign a macro to a command button that was made with a macro

我有一個創建命令按鈕的宏,但是我無法為VBA中的按鈕分配任何宏

已經查看了鏈接,但是它是針對用戶表單的(但是我不足以更改它以適應我的需求)

我當前正在調試的代碼如下,我想我需要在With語句中添加一些內容,但我不知道它會是什么

Dim MyR As Range, MyB As OLEObject
Dim MyR_T As Long, MyR_L As Long


    Set MyR = Range("I3") 'just an example - you get that from your own script
    MyR_T = MyR.Top         'capture positions
    MyR_L = MyR.Left        '...
    'create button
    Set MyB = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
    Link:=False, DisplayAsIcon:=False)

    'set main button properties
    With MyB
        .Name = "MyPrecodedButton"          'important - code must exist ... see below
        .Object.Caption = "Load UseForm"
        .Top = MyR_T
        .Left = MyR_L
        .Width = 130
        .Height = 30
        .Placement = xlMoveAndSize
        .PrintObject = True                 'or false as per your taste
    End With

因此,從您自己發布的鏈接中,您的代碼如下所示:

Set UF = ActiveWorkbook.VBProject.VBComponents("Name_of_the_userform")

With UF.CodeModule
    .InsertLines 2, _
                 "Private Sub " & MyB.Name & "_Click()" & Chr(13) & _
                 "****HERE COMES YOUR FUNCTION CALL FOR THE BUTTON****" & Chr(13) & _
                 "End Sub"
End With

但這僅適用於activeX按鈕。 它的功能相當強大……所以,如果您有更好的解決方案,我將不建議您這樣做。 它的作用是:每個ActiveX Button都具有帶有以下語法的onclick函數:“ ButtonName_Click()”如果您在代碼中的某處放置了此行,則將在單擊時執行。 現在,代碼執行的操作(如您發布的鏈接中所示)是將這些函數寫入用戶窗體代碼中。

使用.onAction方法

像這樣

Sheets("someVeryFunnySheetName").buttons("someSeriousButtonName").onAction = "macroName"

這是一個示例,如果您想將參數傳遞給該宏(我認為axleOutputSHeetCounter是一些整數)

With chartSheet.Buttons("closeOutputSheet")
    .OnAction = "'Module7_Axle.closeOutputSheet """ & axleOutputSheetCounter & """'"
    .Characters.text = "Delete sheet"
    .Characters.Font.Size = 16
End With

編輯:對於activeX按鈕您可以在此處找到具有相同問題和有效解決方案的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM