Objekt-Array oder Sammlung in VBA Excel

9

Ich hätte gerne ein Array von Objekten in Excel, die einen Event-Handler aufrufen. speziell habe ich mehrere Tasten, die die gleiche Funktion für verschiedene Zellen ausführen, und um den Code nicht zu duplizieren, möchte ich einfach auf diese Schaltflächenobjekte über einen Index verweisen (wie ich es in VB 6.0 getan habe), indem ich nach welcher Schaltfläche suche wurde geklickt Ich möchte bestimmte Zellen usw. füllen, so ist die Frage: ein Array von Schaltflächen in Excel VBA? Ich habe ein wenig Arbeit in VB.net gemacht, wo ich Sammlungen verwendet habe, und das hat gut funktioniert ... aber es scheint, dass ich das in VBA nicht machen kann.

    
driveguy 15.12.2009, 19:24
quelle

2 Antworten

1

Trennen Sie den allgemeinen Code in eine einzelne Methode und übergeben Sie die Zelle als Parameter. Weisen Sie jeder Schaltfläche ihre eigene Ereignismethode zu, die wiederum die allgemeine Methode mit der spezifischen Zelle aufruft, die als Parameter bearbeitet werden soll. Etwas wie das:

%Vor%

Damit kann jeder Button einer eigenen Methode zugeordnet werden. Dies ist bereits eingebaut, also versuchen Sie nicht, es neu zu erstellen, halten Sie es einfach.

%Vor%     
David Glass 15.12.2009, 20:03
quelle
3

In VBA gibt es keine Steuerfelder wie in VB. Für bestimmte Steuerelemente können Sie eine benutzerdefinierte Klasse zum Behandeln der Ereignisse erstellen. Angenommen, Sie haben ein Benutzerformular mit zwei Befehlsschaltflächen. Setzen Sie diesen Code im Benutzerformularmodul

%Vor%

Erstellen Sie dann ein benutzerdefiniertes Klassenmodul namens CEventButton, und fügen Sie diesen Code

ein %Vor%

Das WithEvents-Schlüsselwort in der Variablenbemaßung fragt die Ereignisse der Befehlsschaltfläche ab und wird genauso ausgelöst, als wäre es mit einem bestimmten Steuerelement und im Benutzerformularmodul verknüpft.

Folgendes haben Sie getan: Sie haben eine Collection erstellt, die Instanzen Ihrer benutzerdefinierten Klasse enthält, solange das Benutzerformular aktiv ist. Dies stellt sicher, dass diese Instanzen im Gültigkeitsbereich bleiben. Dann haben Sie eine neue Instanz der Klasse erstellt, ihr eine bestimmte Schaltfläche zugewiesen und sie in der Sammlung gespeichert. Sie haben das gleiche für den nächsten Knopf getan. In diesem Beispiel gibt es nur zwei Schaltflächen, aber wenn Sie mehr haben, können Sie dies so lange tun, bis Sie keinen Speicher mehr haben.

Ich erstelle eine RangeAddress-Eigenschaft im benutzerdefinierten Klassenmodul als Beispiel. Welche Informationen Sie speichern müssen, hängt davon ab, was Sie letztlich erreichen möchten.

Damit dieses Beispiel funktioniert, müssen Sie die ShowModal-Eigenschaft des Benutzerformulars auf FALSE setzen, die Befehlsschaltflächen CommandButton1 und CommandButton2 müssen ein Blatt mit dem Codenamen Sheet1 haben, und wahrscheinlich noch etwas anderes.

    
Dick Kusleika 15.12.2009 20:22
quelle

Tags und Links