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.
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
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