これは私の前の質問に関連しています。Excelで、テキストファイル(複数のピボットテーブルで使用)への外部データ接続を更新して、正しいデータソースをポイントし、Excelワークブックとテキストファイルが別のディレクトリ/コンピューターにコピーされたときにデータを更新できるようにしようとしています。 。(テキストファイルへのパスが相対的であるかのように機能する必要があります。)
データソースはタブ区切りのテキストファイルで、最初の列にヘッダーがあります。ODBC接続文字列のパスを変更できるコードがありますが、データを更新しようとすると、Excelはすべてをテキストとしてインポートし、一部の列を元の数値のままにしません。
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
ゼロに変更MaxScanRows
してみました。どこかで読んだところ、Excelがすべての行をスキャンしてデータ型を推測していましたが、それは役に立たなかったようです。
元の接続情報は次のとおりです。
接続文字列:
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
PivotTableウィザード(外部データ-> MSテキストドライバー)を使用して接続を作成したときに、すべてのインポート/解析情報(タブ区切り、最初の行の列ヘッダー、推測データ型など)を設定しました。
(1)行を調べてデータ型を把握するようにExcelに指示する、(2)各列のデータ型を手動でコーディングする、(3)最初に使用されたものと同じデータ型を保持する、または( 4)データが更新された後、マクロのピボットテーブルを調べて、すべての数値をテキストではなく数値に変換しますか?明らかに、(1)または(3)は最も簡単で最も理にかなっているように見えますが、他のオプションを試してみます。