Erstellen eines Makros für Spezialfälle

Wenn die vorhandenen Möglichkeiten des Reportgenerators nicht aussreichen, ist es möglich ein VBA-Makro in die Dokumentvorlage einzubinden. Dies wird nach dem Einfügen der normalen Textfelder automatisch ausgeführt, wenn es folgenden Konventionen entspricht:

Sub LIMSRG2(DB As Object, Proben As Collection, UserID As Long, UserLogin As String)

End Sub

Variablenbeschreibung:

  • DB - Klasse zur Nutzung der Datenbank
  • Proben - Collection die die Probennummern enthält, die in dem aktuellen Report vorhanden
    • Item() As String
  • UserID - die ID des aktuell angemeldeten Users
  • UserLogin - die Loginbezeichnung des aktuell angemeldeten Users

Nutzung der Dantenkank
Für die Verwendung der Datenbank kann das übergebene Objekt DB genutzt werden. Es besitzt folgende Eigenschaften:

  • Sub RSOpen(RS As ADODB.Recordset, SQL As String, Optional Schreibzugriff As Boolean = False, Optional ignoreErrors As Boolean = False, Optional OfflineClone As Boolean = False, Optional Parameter As Collection = Nothing)
    Diese Sub erstellt einen Recordset aus dem übergebenen SQL.
  • Sub Execute(SQLstring As String, Optional Options As Long = 0, Optional ignoreError As Boolean = False, Optional Parameter As Collection = Nothing)
    Diese Sub führt einen SQL-Befehl in der Datenbank aus.
  • Sub AddParameter(Parameters As Collection, Name As String, Value As Variant)
    Diese Sub fügt einen Parameter einer Collection hinzu. Diese Collection kann später an RSOpen und Execute für die Übermittlung von SQL-Paremtern und ihren Werten genutzt werden.
  • Function TranCount() As Integer
    Gibt zurückob eine Transaktion begonnen wurde oder nicht.
  • Sub BeginTrans(), Sub RollbackTrans(), Sub CommitTrans()
    Subs zur Steuerung von Transaktionen.

Tipp
Um nicht selber die Werte aus der Datenbank auslesen zu müssen, kann man sich der beiden unten gezeigten Funktionen und einer Hilfstabelle bedienen. Um einen der eingefügten Werte auszulesen, wird die Function WertAuslesen(Name As String) benutzt.

Der Aufruf von WerteTabelleLöschen() löscht die Hilfstabelle.

Die Hilfstabelle muss wie unten gezeigt aussehen. Der rote Text ist nur eine weitere Beschreibung und gehört nicht zum eigentlichen Aussehen. Die erste Zeile ist nur Text. In diese Zeile muss die Textmarke MakroWerte eingefügt werden. Danach kommt eine Zeile pro benötitem Wert. In der ersten Spalte steht eine Beschreibung, die nachher als Name bei WertAuslesen übergeben wird, sie muss eindeutig sein.  In die zweite Spalte wird die Reportgenerator-Textmarke für den gewünschten Wert eingefügt.

 

Beschreibung Word-Textmarke "MakroWerte" in dieser Zelle erstellen Wert
Probenahmedatum xx.xx.xxxx mit dem Reportgenerator eine Textmarke erzeugen, die den Wert einfügt
Probenehmer xxxx mit dem Reportgenerator eine Textmarke erzeugen, die den Wert einfügt

Private Sub WerteTabelleLöschen()
    ActiveDocument.Bookmarks("MakroWerte").Range.Tables(1).Delete
End Sub

Private Function WertAuslesen(Name As String) As String

Dim Row As Integer
    With ActiveDocument.Bookmarks("MakroWerte").Range.Tables(1)
        For Row = 2 To .Rows.Count
            If Left(.Cell(Row, 1).Range.Text, Len(.Cell(Row, 1).Range.Text) - 2) = Name Then
                WertAuslesen = Left(.Cell(Row, 2).Range.Text, Len(.Cell(Row, 2).Range.Text) - 2)
                Exit For
            End If
        Next Row
    End With

End Function