TransferSpreadsheetのacExportで出力したExcelファイルに1行追加し、
acImportでインポートしたときに追加した行がインポートされません。
例えば、10行のデータを出力しヘッダー込で11行がExcelに出力され、
12行目に新しくデータを追加してもインポート時は10行しか取込まれていません。
インポート時は
vba
1DoCmd.TransferSpreadsheet acImport, 10, テーブル名, ファイル名, True, シート名
で実行しており、特に何もおかしなことはしていないのですが、ピンと思い当たる方いませんでしょうか。。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
1
ベストアンサー
第6引数ですがExcelの範囲名を指定していませんか?シート名は最後に「!」をつける必要があったと思います。
投稿2019/01/29 01:11
総合スコア3830
0
第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, "シート名!"
のような形式で明示的に指定できます。
参考になれば幸いです。
投稿2019/01/29 02:23
総合スコア3020
0
TransferSpreadsheetのacExportで出力したExcelファイルに1行追加し、
「この1行追加し」というのはユーザーがExcelファイルを開いて1行入力したということですか。それとも、VBAで追加したということでしょうか。
VBAで追加したのなら、そのコードも提示してください。
また、提示のコードは第2引数を数値で指定してますが、ここは名前付き定数で指定するようにしましょう。提示する場合はできる限り実際にものに近い形で提示してください。質問用に編集すると実際のコードに間違いがあっても指摘できません。
例えば、下記のように。
vba
1DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, _ 2"t_個人情報", "c:\test\t_個人情報.xlsx", True, "Sheet1!"
ちなみに、シート名の最後の ! を省略しても問題なくインポートできるようです。
当方の実験ではできましたが、できないこともあるようですね。
実験コードを見直したら、!を付けてました。
投稿2019/01/29 02:00
編集2019/01/29 04:43総合スコア34347
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/29 01:48