Microsoft Text Driver を使用して、最初の行 (Excel ファイルと同じディレクトリ) に列名を持つタブ区切りのテキスト ファイルからデータを読み取る複数のピボット テーブルがある MS Excel のプロジェクトに取り組んでいます。テキスト ファイルと Excel ファイルを新しいディレクトリにコピーしてデータを更新しようとすると、テキスト ファイルが見つからないという問題が発生しました。残念ながら、テキスト ファイルへのパスを絶対パスではなく相対パスにするよう Excel に指示する方法はないようです。すべてのピボット テーブルは同じデータ接続を使用するため、正しいテキスト ファイルを参照するようにデータ接続を更新し、マクロにリンクされたボタンを更新するマクロを作成するのはそれほど難しいことではないと考えました。ファイルパスとデータを更新してください。
私は VBA にあまり精通しておらず、オンライン ドキュメントもかなり貧弱なようです。そのため、これを機能させることができませんでした。正しいファイル パスを作成し、データを更新することはできますが、行ったことはありません。新しいファイルパスを使用するように接続を更新する方法を理解することができますが、古いインポート/ファイル解析設定はすべて保持されます。また、データ ソースを手動で更新しながらマクロを記録しようとしましたが、何らかの理由で記録を中断するエラーが常に発生するため、役に立ちませんでした。
以下は、接続で現在使用されている接続文字列とコマンド テキストですが、データを解析/インポートする方法 (ファイルがタブ区切りである、または最初の列にヘッダーがあるなど) については何もないため、よくわかりません。接続がそのデータを保持していることを確認する方法。
接続文字列:
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;
コマンド テキスト:
SELECT *
FROM tableName.txt tableName
テキスト ファイルへの接続のパスを更新するマクロを作成する方法を誰かが知っている場合は、コードを共有してください。または、パスを相対パスにする方法を知っている場合も同様です。どんな助けでも大歓迎です!
編集:
私はそれをもう少しいじっていて、新しいパスを使用するように接続文字列を変更することができました。ただし、ピボット テーブルを更新すると、すべてのデータが数値であるかどうかを推測するのではなく、テキストとしてインポートされます (ただし、少なくともテキスト ファイルの最初の行から列ヘッダーを取得します)。データ型を推測する (または単に古いデータ型を保持する) ように指示する方法についてのアイデアはありますか? 私が現在使用しているコードは次のとおりです。
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