2009-07-27 11 views
3

Ich arbeite an einigen VBA-Skripten für ein Excel-Arbeitsblatt, und ich habe ein Modul erstellt, das eine ganze Liste von meist Strings enthält, die den Namen jedes meiner Datenbankfelder speichern. Wenn jemand die Datenbank ändert, kann er auf diese Weise die VBA-Variable im Modul aktualisieren, und dann wissen alle meine Skripte, die direkt auf die globale Variable und nicht direkt auf den Feldnamen verweisen, den Unterschied nicht.VBA in Excel: Globale Konstanten Datei

Wie auch immer, ich werde in ein paar verschiedenen nicht verwandten Excel-Tabellen arbeiten, und ich möchte, dass sie alle Zugang zu diesem Modul haben. Im schlimmsten Fall könnte ich das Modul manuell in jede Arbeitsmappe kopieren, aber es wäre toll, wenn alle die gleiche Datei extern referenzieren könnten ... ist sowas in VBA/Excel möglich?

Auch jetzt meine Variablen wie folgt aussehen einfach:

Global tblDeviceType As String 

Und dann habe ich initialisieren sie in einer Funktion in dem Modul, das aufgerufen wird, wenn die Arbeitsmappe geöffnet wird. Gibt es einen besseren Weg, um alle meine Konstanten zu erhalten oder funktioniert das?

Oh ja, und ich habe sie nicht wirklich als Konstanten deklariert, da einige von ihnen komplexere Datentypen (wie Ranges) haben und nicht statisch deklariert werden konnten - zumindest schien es nicht so, als könnten sie.

Antwort

2

Es gibt ein paar Möglichkeiten, wie Sie dies wahrscheinlich tun können:

  1. Basis all Excel-Tabellen aus der gleichen Vorlage Excel. Auf diese Weise können alle auf den in der Vorlage deklarierten Code zugreifen. Aber dann musst du die Vorlage auch verteilen, denke ich.
  2. Erstellen Sie eine ActiveX-DLL und dann verweisen Sie es in jeder Ihrer Excel-Vorlagen.
  3. Oder Sie können das Modul dynamisch zur Laufzeit laden. Sie würden eine Methode wie ThisWorkbook.VBProject.VBComponents.Import() verwenden. Wahrscheinlich müssen Sie Ihre Methode ausführen, die die Variablen manuell auffüllt. (Man beachte, ich habe nicht getestet) Weitere Informationen über diese Art der Manipulation von Excel können here
0

Sie könnten ein Excel-Spreadsheet mit allen Namen erstellen, dann benannte Bereiche verwenden, die denselben Namen wie Global haben, Ihren Code ändern, um die benannten Bereiche zu verwenden, und das Blatt addieren.

Ich würde nur das Modul in die anderen Tabellen kopieren.

Bearbeiten: Sie könnten auch in der Lage sein, eine leere Tabelle mit dem Modul darin zu erstellen, dann machen Sie das ein AddIn. Ich weiß nicht, ob Globals in Excel so funktionieren wird, aber es ist einen Versuch wert. Bitte posten Sie hier, wenn Sie es tun und es funktioniert oder nicht.

2

Alternativ können Sie eine Textdatei erstellen (Microsoft Scripting Runtime-Bibliothek -> Klasse Scripting.TextStream), wo Sie Ihre Variablen & laden können, wenn Sie es lesen möchten.

Platzieren Sie die Textdatei an einem zentralen Ort, auf den alle Blätter zugreifen können.
Für Bereiche können Sie die Adresse des Bereichs in der Textdatei speichern.

Lassen Sie mich wissen, wenn ich etwas vermisse.

0

Eigentlich ist der einfachste Weg zu finden ist das Modul in eine .XLA Excel Addin-Datei hinzuzufügen. Fügen Sie diese Datei dann über den Excel-Addins-Dialog hinzu.

Das Modul ist jetzt weltweit für alle Excel-Lösungen verfügbar, die unter diesem Benutzerkonto ausgeführt werden.