Ändern des Pfads der externen Datenquelle der Pivot-Tabelle mit einem Excel-Makro
Ich arbeite an einem Projekt in MS Excel, in dem mehrere Pivot-Tabellen mit dem Microsoft-Texttreiber Daten aus einer tabulatorgetrennten Textdatei mit Spaltennamen in der ersten Zeile (im selben Verzeichnis wie die Excel-Datei) lesen. Ich bin auf ein Problem gestoßen, bei dem ich beim Kopieren der Text- und Excel-Dateien in ein neues Verzeichnis versuche, die Daten zu aktualisieren, die besagen, dass die Textdateien nicht gefunden werden können. Leider scheint es keine Möglichkeit zu geben, Excel mitzuteilen, dass die Pfade zu den Textdateien relativ und nicht absolut sein sollen. Alle Pivot-Tabellen verwenden dieselbe Datenverbindung, daher sollte es nicht allzu schwierig sein, ein Makro zu schreiben, das die Datenverbindung aktualisiert, um auf die richtige Textdatei zu verweisen, und eine Schaltfläche zu haben, die mit dem Makro verknüpft ist, mit dem das Makro aktualisiert wird Dateipfade und aktualisiere die Daten für mich.
Ich bin mit VBA nicht allzu vertraut und die Online-Dokumentation scheint ziemlich schlecht zu sein, daher konnte ich das nicht zum Laufen bringen. Ich kann den korrekten Dateipfad erstellen und die Daten aktualisieren, aber nicht In der Lage, herauszufinden, wie die Verbindung aktualisiert werden kann, um den neuen Dateipfad zu verwenden, aber alle alten Einstellungen für Import / Datei-Analyse beizubehalten. Ich habe auch versucht, ein Makro aufzuzeichnen, während die Datenquelle manuell aktualisiert wurde. Aus irgendeinem Grund treten jedoch immer Fehler auf, die die Aufzeichnung unterbrechen. Das hat also nicht geholfen.
Das Folgende ist die Verbindungszeichenfolge und der Befehlstext, die derzeit von der Verbindung verwendet werden. Es gibt jedoch keine Informationen zum Parsen / Importieren der Daten (die Datei ist durch Tabulatoren getrennt oder hat Überschriften in der ersten Spalte usw.). Daher bin ich mir nicht sicher So stellen Sie sicher, dass die Verbindung diese Daten beibehält.
Verbindungszeichenfolge:
DefaultDir=C:/directoryPath;Driver={Microsoft Text Driver (*.txt; *.csv)};
DriverId=27;FIL=text;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;
SafeTransactions=0;Threads=3;UserCommitSync=Yes;
Befehlstext:
SELECT *
FROM tableName.txt tableName
Wenn jemand weiß, wie man ein Makro schreibt, das den Pfad in der Verbindung zur Textdatei aktualisiert, teilen Sie den Code mit, oder wenn Sie wissen, wie man den Pfad relativ macht, wäre das auch großartig. Jede Hilfe wäre sehr dankbar!
BEARBEITEN:
Ich habe ein bisschen mehr damit herumgespielt und konnte die Verbindungszeichenfolgen ändern, um den neuen Pfad zu verwenden. Wenn ich jedoch die Pivot-Tabelle aktualisiere, werden alle Daten als Text importiert, anstatt zu erraten, ob sie numerisch sein sollen usw. (obwohl die Spaltenüberschriften zumindest aus der ersten Zeile der Textdatei abgerufen werden). Haben Sie Ideen, wie Sie die Datentypen erraten (oder einfach die alten Datentypen beibehalten) sollen? Der Code, den ich gerade benutze, ist:
Public Sub Test()
Dim wb As Excel.Workbook
Dim pc As PivotCache
Dim path As String
Set wb = ActiveWorkbook
path = wb.path
For Each pc In wb.PivotCaches
'Debug.Print pc.Connection
pc.Connection = "ODBC;DBQ=" & path & ";DefaultDir=" & path & ";Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;FIL=text;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UserCommitSync=Yes"
Next
End Sub