Ich refaktoriere eine Reihe von Modulen in einer Excel 2003-Arbeitsmappe und die gleichen Arbeitsblätter werden in jeder Prozedur in jedem Modul deklariert; Ich möchte sie nur einmal global erklären. Ich kann den Arbeitsblattnamen als Literal festlegen, z. B .:
%Vor%Und dann in der Prozedur verwenden:
%Vor%Aber gibt es eine Möglichkeit, das Arbeitsblattobjekt so zu deklarieren, dass der Code in der Prozedur lauten könnte:
%Vor%'1. Fügen Sie ein Modul ein
'2. Deklarieren Sie die öffentliche Arbeitsblattvariable wie folgt im Modul
%Vor%'3. Instanziieren Sie diese öffentliche Variable im Anwendungsladeereignis
%Vor%'Jetzt können Sie das Arbeitsblatt gs_model mit der Variablen xlwkGSModel
referenzieren'Zum Beispiel
%Vor%Es ist lange her, aber besser spät als nie ;-) Ich weiß nicht, ob das in Excel 2003 funktioniert (getestet mit 2007):
Sie müssen Arbeitsblätter nicht einmal im Code deklarieren, da sie bereits deklariert sind. Ich arbeite mit einer deutschen Version von Excel und kann auf ein Arbeitsblatt zugreifen, indem ich "Tabelle1.Cells (...) ..." eintippe. Ich nehme an, in der englischen Version ist es etwas wie "Table1" oder "Sheet1".
Sie können diese Namen auch ändern. Sehen Sie sich im Visual Basic Editor die Microsoft Excel Objekte Ihres VBA-Projekts an. (Sie befinden sich direkt über Ihren Modulen und UserForms in der VBA-Projektansicht). Es gibt die Worksheet-Objekte Ihrer Arbeitsmappe. Wählen Sie ein Blatt und aktivieren Sie das Eigenschaften-Werkzeugfenster. Dort können Sie den Namen des Blattes bearbeiten und unter diesem Namen auf Ihren Code zugreifen.
Sie könnten, aber wollen Sie wirklich mehr globale Variablen? Warum erstellen Sie nicht (innerhalb eines Standardmoduls) eine öffentliche Eigenschaft ModelWorksheet wie folgt:
%Vor%... dann kann Ihr Code tun:
%Vor%Beachten Sie auch, dass Sie direkt auf eines der Arbeitsblätter in der aktuellen Arbeitsmappe verweisen können. Wenn Sie also ein Arbeitsblatt namens Sheet1 verwenden, können Sie Folgendes tun:
%Vor%Wenn Sie das Excel-Ereignis nicht verwenden möchten, können Sie das Arbeitsblatt auch öffentlich deklarieren und anschließend einen Unterwert für den Wert erstellen. Nennen Sie diese Untergruppe am Anfang jeder Untergruppe, um den Wert zu initialisieren. (Ich habe das von orwells Antwort getan.)
%Vor% %Vor% %Vor%Bearbeiten: Der Kommentar von Alistair Knock ist korrekt, ich hätte die Frage gründlich lesen sollen - natürlich ist meine Antwort nicht für Objekte gültig, nur für Typen wie string oder integer. Für Objekte benötigen Sie eine Funktion oder Sub, die eine Instanz erstellt.
Ja, Sie können, ich habe es kürzlich getan. Wenn Sie Ihre Definitionen als Public
definieren, können Sie sie direkt in Ihren anderen Modulen verwenden (natürlich innerhalb derselben Arbeitsmappe).
Vielleicht ist der beste Ansatz, ein separates Modul Globals zu haben und es dort zu platzieren.
Ihre Arbeitsblätter sind "Microsoft Excel-Objekte", die in Ihrem VBA-Projekt-Explorer definiert sind:
Im obigen Bildschirm habe ich mein Worksheet DataSheet benannt, so dass ich jetzt direkt aus dem Code darauf zugreifen kann:
%Vor%Standardmäßig haben Ihre Arbeitsblätter den Namen "Sheet1", "Sheet2" usw., abhängig von Ihrer Sprache.