AW: Dateiübergreifender Datenaustausch mit Query
02.03.2010 11:01:41
Boris
Hallo Franz,
vielen Dank. Auf das mit der Option Sortierung beibehalten hätte ich auch selber kommen können. Erst kucken, dann fragen:)
Leider habe ich aber immer noch Fragen, insbesondere zu VBA. Hier habe ich leider nur Halbwissen und fummel mir meinen Code immer irgendwie zusammen:
1) Query aus Access, die Access-Tabellen sind fest und ändern sich nicht.
Vergibt man in 2003 unter Data Range Properties einen Namen ("Prop"), kann man das Query so ansprechen: Set qt = ThisWorkbook.Worksheets("Area").QueryTables("Prop"). In 2007 kann man zwar auf die gleiche Weise der Query-Connection einen Namen zuweisen, die Connection ist aber in eine Tabelle eingebettet. Gebe ich also der automatisch angelegten Tabelle den Namen "Prop" (mit der dazugehörigen Connection) spreche ich das "Query" also so an: Set LO = ThisWorkbook.Worksheets("Area").ListObjects("Prop"). Ist das korrekt? Im folgenden ein Code-Beispiel, wie ich ein Query über ein Worksheet-Change-Ereignis auslöse und manipuliere. Findest du hier Fehler/Verbesserungen?
Sub QueryUpdate(ByVal strID As String)
Dim strDBPath As String, strDBQ As String
Dim LO As ListObject
With ThisWorkbook.Worksheets(1)
strDBPath = Left(ThisWorkbook.Path, InStrRev(ThisWorkbook.Path, "\")) & .Range("C9"). _
Value
strDBQ = strDBPath & "\" & .Range("C4").Value
End With
Set LO = ThisWorkbook.Worksheets("Area").ListObjects("Prop")
LO.QueryTable.Connection = "ODBC;DSN=MS Access Database;DBQ=" & strDBQ & ";DefaultDir=" & _
strDBPath & ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"
LO.QueryTable.CommandText = "SELECT ID, AreaID, Size " & _
"FROM TArea TArea " & _
"WHERE (ID=" & strID & ") AND (AreaID=1) " & _
"ORDER BY ID"
LO.Refresh
Set LO = Nothing
End Sub
2) Query aus Excel, die Tabellen sind vollständig variabel
Ich gehe jetzt mal davon aus, dass ich bei einem "Excel-Query" den CommandText-String so wie unter 1) anpassen kann. Mit Select * from ... und der Option "Sortierung beibehalten" erhalte ich also in meiner Datei B als Ergebnis ein Abbild des manuell definierten Namens aus Datei A.
Wenn ich nun in Datei B z.B. die Formel =SUM(Prop[[#data];[Size]]) anwende funktioniert das nur solange, wie die Struktur der Tabelle nicht geändert wird. Füge ich eine Spalte ein, bezieht sich die Formel auf die gleiche Spalte und die Spaltenüberschrift [Size] in der Formel wird angepasst. Lässt sich das irgendwie umgehen?
Viele Grüße