Assigner du code à un bouton créé dynamiquement

j'essaie d'obtenir un bouton que j'ai créé dynamiquement sur un formulaire excel userform pour exécuter une macro appelée transfer que j'ai écrit dans Module 1 des "Modules" de mon projet.

ci-dessous, j'ai collé le code que j'ai écrit jusqu'à présent dans la forme de l'utilisateur qui parvient réellement à créer le Transfer to Sheet bouton dans l'image (que j'ai aussi créé dynamiquement) mais pour une raison quelconque, quand je cours VBA je reçois un 438 error message disant que Object doesn't support this property or method.

Peut quelqu'un m'a dit comment je peux résoudre ça?

Voici le code:

Dim framecontrol1 As Control

Set workitemframe = Controls.Add("Forms.Frame.1")
With workitemframe
    .Width = 400
    .Height = 400
    .Top = 160
    .Left = 2
    .ZOrder (1)
    .Visible = True
End With

workitemframe.Caption = "Test"
Set framecontrol1 = workitemframe.Controls.Add("Forms.commandbutton.1")

With framecontrol1
    .Width = 100
    .Top = 70
    .Left = 10
    .ZOrder (1)
    .Visible = True
    .Caption = "Transfer to Sheet"
End With
framecontrol1.OnAction = "transfer"
18
demandé sur Siddharth Rout 2012-04-19 12:41:11

2 réponses

Ici est un exemple. Veuillez la modifier afin de l'adapter à vos besoins :)

cet exemple créera un bouton de commande et lui assignera du code de sorte que lorsqu'il est pressé, il affichera "Hello World".

coller ce code dans le claquement d'un bouton de commande qui créera un nouveau bouton de commande dynamiquement et lui assignera du code.

Option Explicit

Dim cmdArray() As New Class1

Private Sub CommandButton1_Click()
    Dim ctl_Command As Control
    Dim i As Long

    i = 1

    Set ctl_Command = Me.Controls.Add("Forms.CommandButton.1", "CmdXYZ" & i, False)

    With ctl_Command
        .Left = 100
        .Top = 100
        .Width = 255
        .Caption = "Click Me " & CStr(i)
        .Visible = True
    End With

    ReDim Preserve cmdArray(1 To i)
    Set cmdArray(i).CmdEvents = ctl_Command

    Set ctl_Command = Nothing

End Sub
Option Explicit

Public WithEvents CmdEvents As MSForms.CommandButton

Private Sub CmdEvents_Click()

    MsgBox "Hello Word"

End Sub

SNAPSHOT

enter image description hereenter image description here

23
répondu Siddharth Rout 2014-08-18 13:00:37

vous devez ajouter le code au programme UserForm. J'ai utilisé mon code à partir de ce vbax article comme référence

Le code ci-dessous:

  1. fonctionne à partir d'un module normal
  2. ajoute le bouton à un formulaire utilisateur appelé UserForm1
  3. Ajoute ce code à la forme de L'utilisateur pour un événement de clic

    Private Sub CommandButton1_Click()
    Call Transfer
    End Sub
    

VBA du module normal

    Sub AddToForm()
    Dim UF As Object
    Dim frameCOntrol1 As Object
    Set UF = ActiveWorkbook.VBProject.VBComponents("UserForm1")
    Set frameCOntrol1 = UF.designer.Controls.Add("Forms.CommandButton.1")
    With frameCOntrol1
        .Width = 100
        .Top = 70
        .Left = 10
        .ZOrder (1)
        .Visible = True
        .Caption = "Transfer to Sheet"
    End With

    With UF.CodeModule
        .InsertLines 2, _
                     "Private Sub " & frameCOntrol1.Name & "_Click()" & Chr(13) & _
                     "Call Transfer" & Chr(13) & _
                     "End Sub"
    End With

End Sub
9
répondu brettdj 2012-04-19 19:25:35