Arbeiten mit Legacy Excel-Berichten
Produktlinie
Standard
|Expert
Betriebsart
CLOUD ABO
|ON-PREMISES
Module
Leistung & CRM
Budget & Teilprojekt
Fremdkosten
Ressourcenplanung
Business Intelligence
Dieser Artikel behandelt die Office-generierten Legacy Excel-Berichte. Wir empfehlen, stattdessen die Office-Berichte (Word, Excel, PDF) zu verwenden, welche auch im Excel-Format ausgegeben werden können.
Legacy Excel-Berichte werden in Vertec wie die Legacy Word-Berichte als Legacy Office-Berichte registriert. Anhand der Datei-Endung wird festgestellt, ob Excel oder Word zum Ausführen des Berichts gestartet werden soll.
Anders als bei Legacy Word-Berichten gibt es für Legacy Excel-Berichte keinen Vertec-eigenen, eingebauten Berichtsgenerator. Ein Legacy Excel-Bericht muss ein speziell für den Bericht geschriebenes Makro namens DoReport2 enthalten. Dieses Makro wird beim Ausführen des Berichts aufgerufen und ist zuständig für das Einsetzen der Berichtdaten.
Die Syntax lautet wie folgt:
Function DoReport2(vertec as Object, rootObj as Object, optargObj as Object, wrkbook as Workbook) as Boolean
Dieses Makro erlaubt die Übergabe von Vertec und Argumentobjekten sowie des Workbooks. Damit funktioniert das Ausführen von Legacy Excel Reports auch korrekt, wenn mehrere Vertec Instanzen laufen oder zwischen verschiedenen Workbooks umgeschaltet wird.
vertec |
Zugriff auf das Vertec, von dem aus der Report gestartet wurde. |
rootObj |
Das Objekt, auf welchem der Legacy Excel-Report ausgeführt wird. Diese Variable wird verwendet anstelle von |
optargObj |
Die optionale Adresse, welche beim Drucken-Dialog temporär angegeben werden kann. Die Expression |
wrkbook |
Das Excel Woorkbook, in das geschrieben wird. |
Der Rückgabewert der Funktion muss auf True
gesetzt werden, sonst wird das Excel Dokument nicht angezeigt.
Function DoReport2(vertec as Object, rootObj as Object, optargObj as Object, wrkbook as Workbook) as Boolean
DoReport2 = True
End Function
Bei lange laufenden Legacy Excel-Reports kann es nach einer gewissen Zeit zu folgender Meldung kommen:
Microsoft Excel wartet auf die Beendigung einer OLE-Aktion in einer anderen Anwendung
Das lässt sich beheben, indem im Code am Anfang:
Application.DisplayAlerts = False
eingefügt wird.
Wichtig ist, dass das am Ende der Funktion wieder ausgeschaltet wird:
Application.DisplayAlerts = True
Auch in einem Legacy Excel-Report können - wie in Legacy Word-Berichten - OCL-Expressions in Kommentarfeldern evaluiert werden. Hier muss das allerdings von Hand geschehen.
In den Zellen, in denen etwas berechnet werden soll, muss ein Kommentar hinzugefügt und mit der OCL-Expression versehen werden. Der Autor, der von Excel automatisch gesetzt wird, muss von Hand entfernt werden. Das ist wichtig, denn der folgende Code kann nur mit reinem OCL umgehen.
Ein Kommentar sieht dann beispielsweise so aus:
Im folgenden Beispiel ist der Code direkt in die Funktion DoReport2 eingebaut:
Function DoReport2(vertec As Object, rootObj As Object, optargObj As Object, wrkbook As Workbook) As Boolean '---"Generischer" Excel-Report Generator, evaluiert Kommentare und füllt einzelne Zellen. Dim Sheet As Worksheet Dim Comment As Comment Dim OCL As String Set Sheet = wrkbook.ActiveSheet '---Fahre durch alle Kommentare durch und evaluiere das OCL. ' ACHTUNG: die Kommentar müssen OHNE Autor sein, nur reines OCL. On Error Resume Next For Each Comment In Sheet.Comments Comment.Parent.Value = rootObj.eval(Comment.Text) Comment.Delete If Err <> 0 Then MsgBox Err.Description Err = 0 End If Next DoReport2 = True End Function