Jz2611
Jz2611

Reputation: 23

How can I import code to a Activex Control Button on another page?

I have use a button (by clicking) to create a new sheet and insert a button on it, but I want to import codes to the new button (here is MyPrecodedButton).

Private Sub CommandButton1_Click()
Dim z As Integer
Dim wb As Workbook
Dim ws2 As Worksheet, wsnew As Worksheet

Set wb = ThisWorkbook
Set ws2 = wb.Sheets("Sheet2")

z = ws2.Cells(2, 1).Value

Set wsnew = Sheets.Add ' Declare your New Sheet in order to be able to work with after
wsnew.Name = "PIAF_Summary" & z

z = z + 1

With wsnew.Range("A1:G1")
        .Merge
        .Interior.ColorIndex = 23
        .Value = "Project Name (To be reviewed by WMO)"
        .Font.Color = vbWhite
        .Font.Bold = True
        .Font.Size = 13
 End With
ws2.Cells(2, 1).Value = z

Dim Rngc As Range: Set Rngc = wsnew.Range("F35")
With ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=Rngc.Left, Top:=Rngc.Top, Width:=205, Height:=20)
    .Name = "MyPrecodedButton" ' change the name
End With
End sub

Here is the code for MyPrecodedButton

Public Sub MyPrecodedButton_Click()
    MsgBox "Co-Cooo!"
End Sub

Upvotes: 1

Views: 118

Answers (1)

PatricK
PatricK

Reputation: 6433

Let's demonstrate briefly what you can do with VBA to Add buttons.

Below code will Add a button to cell B2 if the ActiveSheet is not "Sheet1".

Option Explicit

Sub SayHello()
    MsgBox "Hello from """ & ActiveSheet.Name & """"
End Sub

Sub AddButton()
    Dim oRng As Range
    Dim oBtns As Buttons ' Add "Microsoft Forms 2.0 Object Library" to References if you want intellisense
    If ActiveSheet.Name <> "Sheet1" Then ' Only works if it's not "Sheet1"
        Set oRng = Range("B2")
        Set oBtns = ActiveSheet.Buttons
        With oBtns.Add(oRng.Left * 1.05, oRng.Top * 1.05, oRng.Width * 0.9, oRng.Height * 2 * 0.9)
            .Caption = "Say Hello!"
            .OnAction = "SayHello"
        End With
        Set oBtns = Nothing
        Set oRng = Nothing
    End If
End Sub

Before and After screenshots:
Before   After

Now Clicking on the button:
Action

So, if you code is generic enough (to work with all your possible situations), there is no need to Add Codes via code. i.e. have your codes ready, then just assign the button's OnAction property to call the correct Sub.

Upvotes: 1

Related Questions