Nachdem der Artikel "Fehler beim Herstellen einer Verbindung in Analysis for Office per VBA" sehr oft gelesen wird, möchte ich hier nach und nach ein paar Tipps & Tricks zu dem Arbeiten mit Analysis Office veröffentlichen.
Das wichtigste, wenn man mit VBA in Analysis Office arbeitet, ist das aktualisieren der DataSource. Sonst funktioniert nichts. Sobald eine Verbindung zum Business Warehouse besteht, muss jede DataSource einmal aktualisiert werden.
Wenn man nur eine DataSource hat, geht das mit dem Befehl:
Call Application.Run("SAPExecuteCommand", "Refresh", "DS_1")
Wenn man mehr als eine DataSource hat, gibt es den Befehl:
Call Application.Run("SAPExecuteCommand", "Refresh")
Damit man aber anschließend weiß, ob die Aktualisierung erfolgreich war, sollte man den Befehl folgendermaßen nutzen:
Dim lResult As Long
lResult= Application.Run("SAPExecuteCommand", "Refresh")
bzw.
Dim lResult As Long
lResult= Application.Run("SAPExecuteCommand", "Refresh", "DS_1")
Somit kann man lResult auf 1 bzw. 0 prüfen und weitere Aktionen erledigen.
Wenn man jedes Mal die DataSource(s) aktualisiert, wird sehr viel Zeit verschwendet. Um diesem entgegenzuwirken gibt es den Befehl:
Call Application.Run("SAPGetProperty", "IsDataSourceActive", "DS_1")
Mit diesem Befehl wird überprüft, ob die DataSource schon aktiv ist. Anschließend noch einmal ein Beispiel Coding
Sub AnalysisOfficeStart()
Dim lResult As Long
'Besteht eine Verbindung zum Business Warehouse
If Application.Run("SAPGetProperty", "IsConnected", "DS_1") Then
'Ist die DataSource aktiv?
If Not Application.Run("SAPGetProperty", "IsDataSourceActive", "DS_1") Then
'Aktualisieren der DataSource
lResult = Application.Run("SAPExecuteCommand", "Refresh", "DS_1")
Else
'Zeige Variablenmaske
lResult = Application.Run("SAPExecuteCommand", "ShowPrompts", "DS_1")
End If
Else
lResult = Application.Run("SAPLogon", "DS_1", "Mandant", "Benutzer", "Passwort")
lResult = Application.Run("SAPExecuteCommand", "Refresh", "DS_1")
End If
End Sub
Anschließend kann das nächste Coding ausgeführt werden.