Próbuję uzyskać tak blisko funkcji wskaźników/klas abstrakcyjnych, jak mogę w VBA.Co to jest publiczny moduł obiektowy w języku VBA?
Mam klasę o nazwie VerificationManager
i weryfikuję kilka komórek w kilku dopasowanych arkuszach kalkulacyjnych. Odbywa się to na różne sposoby w zależności od informacji i arkuszy kalkulacyjnych, które są z nim używane.
Chciałbym móc dokonać ponownego użycia kodu, określając metodę, która będzie wywoływana w ciągu znaków przy użyciu funkcji Application.Run
. Więc mogę przepisać funkcję, która się zmienia.
Teraz, gdy używałem języka Java lub języka C#, byłbym w stanie rozszerzyć klasę abstrakcyjną i przepisać funkcje wewnętrzne na funkcję. Gdybym używał JavaScriptu, mógłbym zapisać funkcję w zmiennej i przekazać zmienną do klasy i wywołać ją stamtąd.
Wewnątrz mojej klasy mam publiczną właściwość o nazwie "verificationModule", którą ustawiam na nazwę funkcji, którą chcę wywołać.
Sub VerifyWorkLocations(empLoc As EmployerLocation)
...
For i = 0 To empLoc.numOfEmp
Application.Run verificationModule, empLoc.taxdescmatch, empLoc.employees(i)
Next i
...
End Sub
Jednak gdy próbuję zadzwonić Application.Run
pojawia się następujący błąd:
Compile Error:
"Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions"
Próbowałem już umieszczając mój User Defined typów w Class Module
ale to w zasadzie powiedzieć, że moduł klasy był zły miejsce dla typu.
Wydaje mi się, że właśnie to zrobiłem, gdy stworzyłem wszystkie moduły do projektu. Czy jest tu jeszcze coś, czego mi brakuje? – leeand00
Gdzie umieściłeś UDT? Jako test, po prostu wstawiłem próbkę UDT na górze modułu utworzonego zgodnie z powyższym opisem i wygląda na to, że działało dobrze ... –
Czy jestem nieporozumieniem problemu i czy chcesz przenieść swoje UDT do pełnej wersji? -fledged Klasy w VBA? –