OKB-000259 | Aus angepasster Funktion VBA aufrufen

Betrifft: ab orgAnice 3

Frage:
Kann man aus dem VBA auf orgBasis-Ausdrücke (persistente Variablen, angepasste Funktionen, Kernfunktionen, Tabellenfelder) zugreifen?

Hinweis: Benutzen auf eigene Gefahr!

Lösung:
Ja, kann man, das geschieht mit Hilfe des ParserRequest-Objekts.

Es gibt den folgenden, nicht dokumentierten, aber funktionierenden Weg, über den Sie über einen orgBasic-Ausdruck eine VBA-Prozedur aufrufen können (auch mit Parameterübergabe) und den Rückgabewert der Funktion auswerten können.

Die Grundlage bildet die Kernfunktion ClientText(). Der Aufruf der Funktion bewirkt die Auslösung eines COM-Ereignisses (Events) des Parser-Objekts, welches über das VBA abgefangen werden kann. Gehen Sie für das Beispiel folgendermaßen vor:

1.) Erstellen Sie im VBA eine neue Klasse namens CParserEvents und tragen Sie den folgenden Quellcode ein:

Option Explicit
Dim WithEvents mobjParser As OrgDbServer31.Parser

Private Sub Class_Initialize()
Set mobjParser = Database.Parser
End Sub

Private Sub mobjParser_ClientText(ByVal bstrId As String, pbstrClientText As String)
pbstrClientText = „Hallo “ & bstrId
End Sub

2.) Tragen Sie im Deklarationsteil eines neuen oder bestehenden (bspw. UserMakros) Moduls die folgende Zeile ein:

Public gobjParserEvents As New CParserEvents

3.) Initialisieren Sie gobjParserEvents (z.B. in InitGlobalObjectsUser())

‚ Hier kommen Ihre Makros hin…
If gobjParserEvents Is Nothing Then

Set gobjParserEvents = New CParserEvents

End If

4.) Erstellen Sie im Tabellenlayout Adressen ein neues Label und geben Sie als Ausdruck den folgenden Ausdruck ein:

ClientText(Name())

Das war es. Beim Bewegen durch die Datensätze in der Tabelle Adressen werden Sie feststellen, dass in dem Label immer der Text „Hallo “ und der jeweilige Firmenname erscheint.

Das ClientText-Event verfügt über 2 Parameter: bstrId und pbstrClientText. bstrId ist ein eingehender Parameter (In), welcher den an die Kernfunktion übergebenen Parameter beinhaltet. In unserem Beispiel also Name().

pbstrClientText ist ein ausgehender Paramater (Out), über welchen der Rückgabewert der Kernfunktion bestimmt wird.

Innerhalb der Ereignisbehandlung kann natürlich je nach Wert von bstrId etwas anderes passieren, es können hier alle Mittel von VBA verwendet werden. Es ist hierbei jedoch besondere Vorsicht geboten, denn ein Fehler, der an dieser Stelle passiert kann u. U. das gesamte orgData zum Stillstand bringen.