Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1140to1144
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dateiübergreifender Datenaustausch mit Query

Dateiübergreifender Datenaustausch mit Query
Boris
Hallo,
folgende Situation: in Datei A.xlsx habe ich eine Tabelle definiert (Name: P_List, Bereich: A15:G50). Diese Tabelle möchte ich nun in Datei B.xlsx per Query importieren, z.B. beginnend in Zelle C20. Das Problem ist, dass Query diese Tabelle P_List nicht erkennt (auch wenn ich unter Options alle Tables aktiviere). Ich kann nur gesamte Tabellenblätter der Datei A importieren.
Bin ich gerade zu blöd, oder geht das schlichtweg nicht?
Viele Grüße
AW: Dateiübergreifender Datenaustausch mit Query
28.02.2010 09:32:35
fcs
Hallo Boris,
leider hat Microsoft den Querryassistenten nicht so konfiguriert, dass er die eingebetteten Tabellenobjekte als wählbare Querryobjekte anbietet.
Der Ausweg: Weise dem Bereich des Tabellenblatts mit der Tabelle/Liste in Excel einen "normalen" Namen zu.
Dieser Bereichs-Name steht dann im Querryassistenten auch zur Auswahl. Glücklicher Weise haben es die Programmierer bei MS wenigstens geschafft, dass sich die Bereichszuweisung des Namens automatisch an den Bereich des Tabellen/Listen-Objekts anpasst.
Gruß
Franz
AW: Dateiübergreifender Datenaustausch mit Query
01.03.2010 10:00:21
Boris
Hallo Franz,
vielen Dank erstmal. Deine Lösung mit der Namensvergabe funktioniert, allerdings nur mit folgenden Einschränkungen:
In A.xlsx habe ich nun 2 Namen: Tabelle1 (automatisch von 2007 angelegt) und P_List (manuell angelegt mit Refers to =Summary!$A$10:$C$20. Nur zur Info: Definiert man P_List mit Refers to =Tabelle1[[#all]] wird dieser Name über Query nicht erkannt).
Problem 1: Erweitere ich Tabelle1 mit Spalten oder Zeilen, wird der manuell festgelegte Name P_List nicht automatisch erweitert. Außer man bezieht diesen auf =Tabelle1[[#all]], aber dann findet Query den Namen P_List nicht.
Problem 2: Füge ich Zeilen oder Spalten zwischendrin ein, wird P_List wie zu erwarten angepasst. Bei einer Query-Aktualisierung werden jedoch neu angelegte Spalten nicht automatisch angezeigt. Dies liegt meiner Vermutung nach daran, dass die Select-Anweisung nicht Select * From lautet, sondern dass jede Spalte explizit benannt wird. Wie lässt sich dies lösen? Funktioniert es, wenn ich per VBA die Select-Anweisung auf Select * From ... setze?
Problem 3: Wenn man eine Spaltenüberschrift ändert, lässt sich das Query nicht mehr aktualisieren. Dies liegt wohl wie schon bei Problem 2 beschrieben an der Select-Anweisung, da ja die per Select-Anweisung fixierte Spalte in dieser Form nicht mehr existiert...
Viele Grüße
Anzeige
AW: Dateiübergreifender Datenaustausch mit Query
01.03.2010 10:01:52
Boris
[Edit: Habe vergessen "Frage noch offen" zu aktivieren]
Hallo Franz,
vielen Dank erstmal. Deine Lösung mit der Namensvergabe funktioniert, allerdings nur mit folgenden Einschränkungen:
In A.xlsx habe ich nun 2 Namen: Tabelle1 (automatisch von 2007 angelegt) und P_List (manuell angelegt mit Refers to =Summary!$A$10:$C$20. Nur zur Info: Definiert man P_List mit Refers to =Tabelle1[[#all]] wird dieser Name über Query nicht erkannt).
Problem 1: Erweitere ich Tabelle1 mit Spalten oder Zeilen, wird der manuell festgelegte Name P_List nicht automatisch erweitert. Außer man bezieht diesen auf =Tabelle1[[#all]], aber dann findet Query den Namen P_List nicht.
Problem 2: Füge ich Zeilen oder Spalten zwischendrin ein, wird P_List wie zu erwarten angepasst. Bei einer Query-Aktualisierung werden jedoch neu angelegte Spalten nicht automatisch angezeigt. Dies liegt meiner Vermutung nach daran, dass die Select-Anweisung nicht Select * From lautet, sondern dass jede Spalte explizit benannt wird. Wie lässt sich dies lösen? Funktioniert es, wenn ich per VBA die Select-Anweisung auf Select * From ... setze?
Problem 3: Wenn man eine Spaltenüberschrift ändert, lässt sich das Query nicht mehr aktualisieren. Dies liegt wohl wie schon bei Problem 2 beschrieben an der Select-Anweisung, da ja die per Select-Anweisung fixierte Spalte in dieser Form nicht mehr existiert...
Viele Grüße
Anzeige
AW: Dateiübergreifender Datenaustausch mit Query
01.03.2010 15:25:14
fcs
Hallo Boris,
mit den Unzulänglichkeiten bei der Anpassung des Bereichs für den Namen an die Größe der Tabelle bei mehr Spalten wirst du wohl leben müssen undggf. manuell den Bereich anpassen müssen.
Problem 2: SQL-Anweisung
Hier kannst du ggf. manuell den Abfrage-Befehlstext anpassen.
Dazu nach Klick in die Tabelle mit den externen Daten im Menü "Daten-Verbindungen" die Eigenschaften bearbeiten. Hier kannst du nach Auswahl des Verbindungseigenschaften-Dialogs den Befehlstext anpassen und die Einzelfelder durch * ersetzen.
Gruß
Franz
Userbild
Anzeige
AW: Dateiübergreifender Datenaustausch mit Query
01.03.2010 15:48:04
Boris
Hallo Franz,
Ok, das mit dem * funktioniert, allerdings werden neu eingefügte Spalten (Datei A) in der Querytabelle nicht zwischendrin, sondern rechts hinzugefügt (Datei B), so daß die Ursprungs- und Ergebnistabelle nicht die gleiche Struktur haben....?
Außerdem frage ich mich, wieso Excel bei "edit query" folgende Meldung ausspuckt: "unrecognized database format". Bei Access-Queries kommt diese Meldung nicht.
Und weißt du zufällig, wieso in Excel 2007 folgender Code kein Ergebnis liefert? In Excel 2003 funktioniert dies. Sind Queries in 2007 andere Objekte?
Sub Queries_Anzeigen()
Dim ws As Worksheet
Dim qt As QueryTable
For Each ws In Worksheets
For Each qt In ws.QueryTables
Debug.Print qt.Name
Next
Next
End Sub
Viele Grüße
Anzeige
AW: Dateiübergreifender Datenaustausch mit Query
01.03.2010 17:29:39
fcs
Hallo Boris,
die Reihenfolge der Spaltentitel kann man bei der Querry durch eine Option unter den Eigenschaften beeinflussen. Rot eingekringelte Option deaktivieren, dann bliebt die Reihenfolge der Spalten aus der Quelle bei Einfügungen/Ändeungen erhalten.
Userbild
Mit der Fehlermeldung kann ich nichts anfangen. Kenne ich nicht.
In Excel 2007 werden die Querries als ListObject (Tabelle) mit einer entsprechenden Verknüpfung zu der Abfrage in die Exceltabellenblätter eingebettet.
Sub ListObjects_Anzeigen()
Dim ws As Worksheet
Dim oListObject As ListObject
For Each ws In Worksheets
For Each oListObject In ws.ListObjects
Debug.Print oListObject.Name
Next
Next
End Sub

Gruß
Franz
Anzeige
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
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige