Was ist eine öffentliche Objekt-Modul in VBA?
Ich versuche zu bekommen als in der Nähe von Funktionszeigern /abstrakte Klassen, wie kann ich in VBA.
Habe ich eine Klasse namens VerificationManager
und überprüft eine Reihe von Zellen in einem paar von Tabellen übereinstimmen. Dies geschieht in unterschiedlicher Weise abhängig von den Informationen und Tabellen mit es.
Ich würde gerne in der Lage sein, um den code wiederverwendbar durch Angabe eine Methode aufgerufen werden, in einen string mit Hilfe der Application.Run
Funktion. So kann ich schreiben Sie die Funktion, die änderungen.
Nun wenn ich mit Java oder C# würde ich in der Lage sein zu verlängern eine abstrakte Klasse, und schreiben Sie die Interna der Funktion. Wenn ich mit JavaScript, ich könnte speichern einer Funktion in einer Variablen und übergeben Sie die variable der Klasse und rufen Sie es von dort.
In meiner Klasse habe ich eine öffentliche Eigenschaft mit dem Namen "verificationModule", die ich auf den Namen der Funktion möchte ich es nennen.
Sub VerifyWorkLocations(empLoc As EmployerLocation)
...
For i = 0 To empLoc.numOfEmp
Application.Run verificationModule, empLoc.taxdescmatch, empLoc.employees(i)
Next i
...
End Sub
Jedoch, wenn ich versuche zu nennen Application.Run
ich die folgende Fehlermeldung:
Kompilieren-Fehler:
"Nur benutzerdefinierte Typen, die in öffentlichen objektmodulen werden kann
dazu gezwungen, oder von einer Variante oder zu spät gebundene übergebenen Funktionen"
Ich bereits habe versucht, indem Sie meine benutzerdefinierte Typen in einem Class Module
aber im Grunde gesagt, dass ein Klassenmodul, das war der falsche Ort für ein Typ ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kommt der Fehler von vollwertigen VB, wo Sie können erstellen Sie ein ActiveX-dll-Projekt, erstellen Sie eine öffentliche Klasse dort und legte einen UDT in dieser Klasse.
In VBA verwenden Sie Klassen anstelle von UDTs, wenn Sie brauchen, um zu zwingen, zu oder von einer Variante.
Also nur deklarieren Sie eine Klasse mit allen Feldern, die Sie in Ihrem UDT, und löschen Sie den UDT.
Alternativ erstellen Sie eine DLL in VB6, wäre nur die Erklärung enthalten sein der Typ -, Referenz -, dass die dll in VBA. Oder, wenn Sie bequem mit IDL, erstellen Sie einfach eine TLB-Datei direkt.
Fügen ein Modul zu einem VBA-Anwendung, versuchen Sie die folgenden Schritte aus (vorausgesetzt, Sie haben bereits in der VBA-IDE):
Dies ist, wo Sie haben, um UDT. Ich glaube, das ist, weil der Unterschied in der Art, solche Typen werden intern gespeichert von VBA relativ zum COM-Stil Struktur-Elemente/Objekte deklariert/manipuliert als Klassen...
Sub main()
:Dim v as variant: v = xxx
. Dasselbe passiert, wenn Sie versuchen, zu nennenApplication.Run
mit Parametern, die UDTs.