Reference to Command Buttons Added During Runtime with VBA in Excel

前端 未结 2 587
长情又很酷
长情又很酷 2021-01-28 14:55

During runtime, the user is able to add any number of ActiveX command buttons to Sheet 1. I need to have a reference to these new buttons with VBA, but am not sure how.

相关标签:
2条回答
  • 2021-01-28 15:37
    Public Sub Node_Button_Duplication()
        ActiveSheet.Shapes("CommandButton1").Select
        Selection.Copy
        Cells(5, 10 + 7 * (NumNodes - 1) - 1).Select
        ActiveSheet.Paste
        Selection.ShapeRange.IncrementLeft 47.25
        Selection.ShapeRange.IncrementTop -13.5
    
        '~~> This will give you the name
        Debug.Print Selection.Name
    End Sub
    

    FOLLOWUP

    If you know the name of the commandbutton then you can change the properties like this.

    Option Explicit
    
    Sub Sample()
        Dim shp As Shape
    
        '~~> Since you already have the name replace "CommandButton1" by
        '~~> the name that you have
        Set shp = ActiveSheet.Shapes("CommandButton1")
    
        With shp.OLEFormat.Object
            .Object.Caption = "Test"
            .Left = 15
            .Top = 15
        End With
    End Sub
    

    You can also combine the above two like this

    Public Sub Node_Button_Duplication()
        Dim shp As Shape
    
        ActiveSheet.Shapes("CommandButton1").Select
        Selection.Copy
        Cells(5, 10 + 7 * (NumNodes - 1) - 1).Select
        ActiveSheet.Paste
        Selection.ShapeRange.IncrementLeft 47.25
        Selection.ShapeRange.IncrementTop -13.5
    
        '~~> This will give you the name
        Debug.Print Selection.Name
    
        Set shp = ActiveSheet.Shapes(Selection.Name)
    
        With shp.OLEFormat.Object
            .Object.Caption = "Test"
            .Left = 15
            .Top = 15
        End With
    
    End Sub
    

    And if you need to iterate through all the buttons then use this code.

    Sub CommanButtons()
        Dim wks As Worksheet
        Dim OLEObj As OLEObject
    
        '~~> set it as per the relevant sheet
        Set wks = Worksheets("sheet1")
    
        For Each OLEObj In wks.OLEObjects
            If TypeOf OLEObj.Object Is MSForms.CommandButton Then
                Debug.Print OLEObj.Object.Caption
            End If
        Next OLEObj
    End Sub
    
    0 讨论(0)
  • 2021-01-28 15:43

    Suppose you have a command button (OLE object) with the name 'cmdOriginal' and you want to copy that button and paste it on the same workheet and change the name and caption of the new button into "cmdButtonCopy" and "This is a copy". The newly added button has the highest index in the OLEObjects collection! Place the following code in the code section of the worksheet

    Sub x1()
        Me.OLEObjects("cmdOriginal").Copy
        Me.Paste
        With Me.OLEObjects(Me.OLEObjects.Count)
            .Name = "cmdButtonCopy"
            .Caption = "This is a copy"
        End With
    End Sub
    
    0 讨论(0)
提交回复
热议问题