質問: TransferSpreadsheetのacExportで出力したExcelファイルに1行追加し、 acImportでインポートしたときに追加した行がインポートされません。 例えば、10行のデータを出力しヘッダー込で11行がExcelに出力され、 12行目に新しくデータを追加してもインポート時は10行しか取込まれていません。 インポート時は ``` DoCmd.TransferSpreadsheet acImport, 10, テーブル名, ファイル名, True, シート名 ``` で実行しており、特に何もおかしなことはしていないのですが、ピンと思い当たる方いませんでしょうか。。
回答: 第6引数で「シート名」を指定していますが、この引数は厳密には「シート名」を指定するのではなく「範囲(Range)」を指定する引数です。 最初にAccessからExportした際、Excelに出力したテーブル名のシートが作成され、そこにデータが出力されます。 それに加え、そのデータ範囲がExcelの「名前」にも追加されています。 例えば"DATA_01"テーブルから5列10行のデータを出力した場合、 ・「DATA_01」シートにヘッダ込み11行のデータが出力される。 ・「DATA_01!$A$1:$E$11」のデータ範囲が「DATA_01」という「名前」で追加される。 ⇒「数式」タブの「名前の管理」で確認できます。 このシートからデータを取得する際に「DATA_01」という範囲を指定すると、シート名としての「DATA_01」よりも先に「名前」の「DATA_01」が優先して参照されるため、範囲が絞られたインポートになってしまいます。 回避策 回避策は ・「名前」としての「DATA_01」を削除する、または範囲拡張する ・Importの引数をシート名として判断させる といったところでしょうか。 今回の場合はAccessVBAでの制御だと思いますので、前者のようにExcel側のデータをゴリゴリやるのは面倒かもしれません。 後者であれば、sousukeさんのアドバイスにある通り `DoCmd.TransferSpreadsheet acImport, 10, "Access側テーブル名", "Excelファイル名", True, "シート名!"` のような形式で明示的に指定できます。 参考になれば幸いです。