Frage

Was ist der beste Weg, um gemeinsame benutzerdefinierte Typen über VBA-Module zu verwalten?

Ich verwende die gleichen benutzerdefinierten Typen in verschiedenen Modulen. Zum Beispiel muß ich häufig vertreten (x, y) Punkte, so dass ich diese Type in verschiedenen Modulen am Ende mit:

Type XYpointType
    x As Double
    y As Double
End Type

Ich gehe Argumente vom Typ XYpointType vom und zur U-Booten und Funktionen in verschiedenen Modulen.

Aber ich vermute, dies ist ein schlechter Weg benutzerdefinierte Typen zu verwalten. Die exakt gleiche Type Definition Code endet in vielen verschiedenen Modulen auf.

Alternativ könnte ich diese Type Erklärung in einem einzigen, zentralen „Typen“ Modul und alle anderen Module diese besondere Art, um auf die Typen Modul beziehen. Der Nachteil ist, dass jedes Modul seine „Modularität“ verliert, dass es byt die „Typen“ Modul begleitet werden muss, wo immer es geht.

Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Das ist interessant, weil ich nie wusste, dass Sie zwei Module mit dem gleichen Namen, beide zur Vereinbarkeit eines öffentlichen Typs haben könnten. Nun, da weiß ich, ich bin entsetzt.

So zuerst, Eric Towers ist richtig, dass Sie Ihre Typdeklaration setzen in nur einem Modul. Weitere Module, die diese Art verwenden, werden an diesem Modul abhängig ist verfügbar, aber das ist nur etwas, das mit der Modularisierung kommt. Die Notwendigkeit zu verwalten Abhängigkeiten zwischen den Modulen gemeinsam ist alle Software-Entwicklung. Es ist bedauerlich, dass in einem einzigen VBA-Projekt (wie die Art, die Sie in einer einzigen Excel-Arbeitsmappe finden würden) die einzige Option für die Verwaltung von Modulabhängigkeiten Handbuch ist. (In VBA „Module“ sind wirklich „Quellcodedateien“. Andere Sprachen / Umgebungen verschiedene geordnete Verpackungssysteme haben.)

Jetzt für den erschreckenden Teil. Wenn Sie declare Typen mit dem gleichen Namen in verschiedenen Modulen zu tun, sind Sie selbst Einstellung für Probleme auf. Betrachten wir zwei VBA-Module:

'Module1

Public Type typ
    x As String
End Type

Public Sub useTyp()
    Dim t As typ
    t.x = 42

    Debug.Print t.x + t.x
End Sub

und

'Module2

Public Type typ
    x As Long
End Type

Public Sub useTyp()
    Dim t As typ
    t.x = 42

    Debug.Print t.x + t.x
End Sub

im selben Projekt, Ihr Code "kompiliert" (zumindest in Excel VBA). Aber das beide ‚useTyp‘ subs gibt unterschiedlichen Ausgang. Schlimmer noch, wenn Sie eine der Typdeklarationen von einem der Module entfernen, haben Sie plötzlich das Verhalten der ‚useTyp‘ Routine im selben Modul geändert! Diese Art der Mehrdeutigkeit ist nicht wünschenswert.

Was ist hier los ist, dass VBA wirklich zwei verschiedene Arten schafft, ‚Module1.typ‘ und ‚Module2.typ‘. Wenn Sie im selben Modul sind und nicht die Typnamen qualifizieren, findet VBA leise die „richtige“ Art und verwendet es.

Ich bin ein wenig zu hören, überrascht, dass Sie vorbei um Instanzen eines ‚XYpointType‘ auf Module, die eine andere ‚XYpointType‘ Erklärung haben. Es ist nicht so wichtig, aber könnten Sie den Code posten? Ich bin in nitpicky Dinge interessiert wie diese ...

Andere Tipps

Verwenden Sie Ihre zweite Methode. Der Punkt ist, einen wiederverwendbaren Typ Blob zu machen. Um wiederverwendbar, muss sie getrennt werden. Dann ja, jedes Modul, das diese Typen verwendet, muss diese Blob verweisen. Aber das gleiche kann über Module gesagt werden ineinander Aufruf, Formulare benötigen die Module sie nennen, et c.

Sie können auch eine Klasse für Ihre XYPoints erstellen. Auf diese Weise können Sie benutzerdefinierte Funktionen haben, und Methoden sollten Sie müssen diesen Weg zu gehen. Arten sind sehr begrenzt im Vergleich zu Klassen.

Hier ist eine gute Ressource für den Einstieg: http://www.cpearson.com /excel/Classes.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top