Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

BW-Query per VBA aktualiseren

Forumthread: BW-Query per VBA aktualiseren

BW-Query per VBA aktualiseren
jojo
Hallo,
ich arbeite viel mit BW-Queries in Excel. Jetzt habe ich mir für das Abarbeiten von vielen Dateien ein Marko gebaut, welches je Datei die folgende Funktion
Run "SAPBEX.xla!SAPBEXrefresh", True
ausführt. (Aktualisierung aller Queries in einer Datei)
Dies funktioniert sehr gut, unter der Prämisse, dass alle Variablenwerte weiterhin manuell eingegeben werden müssen, oder bereits in der Query gespeichert sind.
Gibt es auch eine Möglichkeit Paramter beim refreshen per VBA-Code zu übergeben?
z.B. Periode, Kostenartenhierarchie etc.?
Wie spreche ich die Parameter an? Ich habe schon diverese Hilfen und Foren durchsucht und bin dabei noch nicht richtig fündig geworden.
Kann mir jemand weiter helfen?
Danke
Heiko
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: BW-Query per VBA aktualiseren
26.11.2011 12:40:42
fcs
Hallo Heiko,
grundsätzlich funktioniert es.
Entscheidend ist, dass du die Möglichkeit hast, den SQL-String der Datenabfrage zu ändern.
Sind die Abfragen in Excel gespeichert, dann ist es -ggf. mit einigem Aufwand- möglich, den SQL-Text per Makro aus festem Text und variablem Text zu generieren. siehe Beipiel unten für eine Abfrage in eine MS Access-Datenbank. Hier werden aus einer Tabelle in Access immer nur die Namen mit dem jeweiligen Anfangsbuchstaben angezeigt.
Sind die Abfragen in Querry-Dateien gespeichert (=Textdatei mit SQL-Text) dann müsstest du den Text der Querry-Dateien vor dem Refresh der Abfragen entsprechend anpassen. Auch das ist möglich, indem man die Querry-Datein von Excel aus jeweils neu generiert.
Gruß
Franz
'Erstellt unter Excel 2007 - Windows Vista
Sub Abfrage_Abitur_Namen()
Dim intI As Integer, boolUpdate As Boolean
For intI = 65 To 255
Select Case intI
Case 65 To 90, 196, 214, 220 'A bis Z, Ä, Ö, Ü
boolUpdate = True
Case Else
boolUpdate = False
End Select
If boolUpdate = True Then
Call Abfrage_Abitur(strAbi:="1974", strName:=Chr(intI))
If MsgBox("Namen mit   " & Chr(intI), vbRetryCancel, _
"Namen Abitur 1974") = vbCancel Then Exit For
End If
Next
End Sub
Sub Abfrage_Abitur(strAbi As String, strName As String)
'strAbi = Abfragewert - enthalten in Feld "Abitur"
'strName = Abfragewert - Feld "Geburtsname" beginnt mit
Dim strSQL As String, strCon As String
'String für Verbindung
strCon = "ODBC;DSN=MS Access Database;DBQ="
strCon = strCon & "C:\Users\Franz\Documents\Acc_db\ADRESSEN.MDB"
strCon = strCon & ";DefaultDir=" & "C:\Users\Franz\Documents\Acc_db"
strCon = strCon & " ;DriverId=281;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"
'String für SQL-Abfrage
'Auswahl-Felder
strSQL = "SELECT `Abitur 1974`.Familienname, `Abitur 1974`.Geburtsname, "
strSQL = strSQL & "`Abitur 1974`.Vorname, `Abitur 1974`.`Zweiter Vorname`, "
strSQL = strSQL & "`Abitur 1974`.Strasse, `Abitur 1974`.Ortsteil, `Abitur 1974`.PLZ, "
strSQL = strSQL & "`Abitur 1974`.Ort, `Abitur 1974`.Land, `Abitur 1974`.Staat, "
strSQL = strSQL & "`Abitur 1974`.Anmerkung, `Abitur 1974`.Abitur, `Abitur 1974`.Gestorben"
'Quelltabelle
strSQL = strSQL & " FROM `Abitur 1974` `Abitur 1974`"
'Filter-Wert(e) - Variabel
strSQL = strSQL & " WHERE (`Abitur 1974`.Abitur Like '%" & strAbi & "%'"
strSQL = strSQL & " AND `Abitur 1974`.Geburtsname Like '" & strName & "%')"
'Sortierung
strSQL = strSQL & " ORDER  BY `Abitur 1974`.Geburtsname, `Abitur 1974`.Vorname"
With Worksheets("Tabelle2").ListObjects(1).QueryTable
.Connection = strCon
.CommandText = strSQL
.Refresh BackgroundQuery:=False
End With
End Sub

Anzeige
;
Anzeige

Infobox / Tutorial

BW-Queries mit VBA aktualisieren


Schritt-für-Schritt-Anleitung

Um BW-Queries in Excel per VBA zu aktualisieren, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Makro erstellen: Öffne Excel und gehe zu Entwicklertools > Visual Basic. Erstelle ein neues Modul.

  2. VBA-Code einfügen: Füge den folgenden Code in das Modul ein, um die Queries zu aktualisieren:

    Sub UpdateBWQueries()
       Dim ws As Worksheet
       Set ws = ThisWorkbook.Sheets("Tabelle1") 'Ändere den Tabellennamen nach Bedarf
       ws.ListObjects(1).QueryTable.Refresh BackgroundQuery:=False
    End Sub
  3. Parameter übergeben: Wenn du Parameter wie Periode oder Kostenartenhierarchie übergeben möchtest, musst du den SQL-String entsprechend anpassen. Beispiel:

    strSQL = "SELECT * FROM [DeineTabelle] WHERE Periode = '" & strPeriode & "'"
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro UpdateBWQueries aus, um alle Queries zu aktualisieren.


Häufige Fehler und Lösungen

  • Fehler: Run-time error '1004'

    • Lösung: Überprüfe, ob die angegebene Tabelle in deinem Arbeitsblatt existiert und die Referenzen korrekt sind.
  • Fehler: Abfrage liefert keine Ergebnisse

    • Lösung: Stelle sicher, dass die übergebenen Parameter korrekt sind und in der Datenquelle existieren.

Alternative Methoden

Falls du keine VBA-Anpassungen vornehmen möchtest, kannst du auch die integrierten Funktionen von Excel nutzen:

  • Abfrage aktualisieren: Klicke mit der rechten Maustaste auf die Query in der Arbeitsmappe und wähle Aktualisieren.
  • Parameterabfrage erstellen: Nutze die Abfrage-Editor-Funktion, um interaktive Parameterabfragen zu gestalten.

Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du eine BW-Query mit Parameterübergabe aktualisieren kannst:

Sub AktualisiereQueryMitParametern()
    Dim strPeriode As String
    strPeriode = "2023-01" ' Beispiel für eine Periode

    Dim strSQL As String
    strSQL = "SELECT * FROM [DeineTabelle] WHERE Periode = '" & strPeriode & "'"

    With Worksheets("Tabelle2").ListObjects(1).QueryTable
        .CommandText = strSQL
        .Refresh BackgroundQuery:=False
    End With
End Sub

Dieses Beispiel verwendet die vba queries, um die Daten gezielt zu filtern und zu aktualisieren.


Tipps für Profis

  • Verwende BackgroundQuery:=True: Dies ermöglicht dir, während der Aktualisierung in Excel weiterzuarbeiten.
  • Dokumentiere deinen Code: Gute Kommentare helfen dir, deine Logik später besser nachzuvollziehen.
  • Nutze Fehlerbehandlung: Implementiere On Error-Anweisungen, um unerwartete Fehler abzufangen.

FAQ: Häufige Fragen

1. Wie kann ich die Parameter für die BW-Query dynamisch setzen? Du kannst die Parameterwerte in Variablen speichern und dann im SQL-String verwenden.

2. Funktioniert das auch in Excel 2016? Ja, die beschriebenen Methoden funktionieren auch in Excel 2016 und neueren Versionen, solange VBA unterstützt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige