2009-04-27 4 views
0

Dies ist eine VBA-Frage. Ich habe die Frage gefunden: "Hinzufügen von Steuerelementen zu einem Rahmen in einem Excel-Benutzerformular mit VBA" und verwendete seine Methode, um meinem Rahmen in meinem Benutzerformular commandbuttons hinzuzufügen. Da ich vier Befehlsschaltflächen hinzugefügt, lief ich den Code in einer Schleife, und verwendet, um dieHinzufügen von Code zu einer Befehlsschaltfläche, die einem Rahmen in einem Benutzercode dynamisch hinzugefügt wurde

With ... 
     .Name = "commandbutton" & x 

jeder Befehlsschaltfläche einen eigenen Namen zu geben. Ich habe in meine Code-Makros für jede Befehlsschaltfläche aufgenommen (da ich sie umbenannt habe, weiß ich, wie der Name jedes Befehlsblocks lautet), aber wenn ich auf die Schaltfläche klicke, passiert nichts.

Alternativ kann, wenn mir jemand erklären könnte, wie Code verwenden Kontrollen in einen Rahmen in einem Formular zu platzieren, könnte ich mein Problem eine andere Art und Weise lösen.

Danke,

Michael

Antwort

0

Es scheint, dass Ereignisse nur für Objektvariablen behandelt werden, die angegeben wurden, wenn das VBA-Programm kompiliert wird (dh zur Design-Zeit.) Wenn Sie dynamisch Objekte im Programm erstellen (dh zur Laufzeit), dann müssen Sie diesen Objekten Verweise auf entsprechende Objektvariablen zuweisen, die bereits deklariert wurden.

Wie pro Ihr Beispiel in dem Modul, das auf Ihre UserForm betrifft, würden Sie haben müssen:

Public WithEvents btn1 As MSForms.CommandButton 
Public WithEvents btn2 As MSForms.CommandButton 
Public WithEvents btn3 As MSForms.CommandButton 
Public WithEvents btn4 As MSForms.CommandButton 

(Die MSForms Präfix für den Variablentyp möglicherweise nicht unbedingt erforderlich sein)

dann in Ihrer With Anweisung, um die Steuerelemente zu erstellen, die Sie jedes Steuerelement zu einer der Variablen zuweisen müssen, die am Ende ziemlich chaotisch ist.

Bessere Lösungen:

  • die maximale Anzahl der möglichen Tasten zur Entwurfszeit erstellen und wechseln Sie einfach die Visible Eigenschaft die korrekten zeigen
  • , wenn die Funktion der einzelnen Tasten zur Laufzeit bestimmt werden würde Verwenden Sie dann eine Eigenschaft des Objekts CommandButton, um dies zu bestimmen (z. B. Caption Eigenschaft, Tag Eigenschaft) und dann den Ereignishandler für diese Schaltfläche aufrufen die entsprechende Funktion auf der Grundlage dieser Eigenschaft
  • ändern Sie die Benutzeroberfläche und verwenden Sie eine ListBox oder ComboBox anstelle von Knöpfen
Verwandte Themen