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