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"
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
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:
- fonctionne à partir d'un module normal
- ajoute le bouton à un formulaire utilisateur appelé UserForm1
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