質問: AccessVBA(2010)を使用しています。 ``` DoCmd.TransferSpreadsheet acExport, 10, テーブル名, ファイスパス, True, シート名 ``` で出力されたものを ``` DoCmd.TransferSpreadsheet acLink, 10, テーブル名, ファイルパス, False, シート名$範囲 ``` の形で取り込んでいます。 その際に、テーブル上はテキスト型の項目で格納されている値は1か0の項目があります。 出力された際には表示形式は標準ですが、左寄せの文字列の形で出力されます。 ただし、表示形式が標準なため1か0を入力したり、フォーカスを一旦あてると右寄せになります。 右寄せになっているセルがその項目に1つでもあった場合で、 上記の形で取込を行うと、右寄せの値の部分は正常に取り込まれ、他の左寄せの値は全て「#Num!」になってしまいます。 もし、出力されたものを何も編集せずそのまま取り込むとうまくいきます。 これを回避することは出来ないでしょうか。 (編集しても問題なく取込めるように出来ないでしょうか)
回答: `DoCmd.TransferSpreadsheet acLink`なので、取込しているわけではなくリンクテーブルですね。 `DoCmd.TransferSpreadsheet`では、ワークシートの先頭から8行分に保存されているデータが事前にチェックされ、各列のAccessテーブル上でのフィールドのデータ型が決定されます。 ですので、エクセルが編集されて状況が変化するリンクテーブルだと、エラーの回避は困難だと思われます。 リンクテーブルではなく、インポートであれば、インポート定義などが使用できますので、すべての項目を文字型で扱っておくようにすれば、エラーは回避できるでしょう。 Excel→Accessへのインポート時のフィールド別型指定 追記 DoCmd.OutputTo メソッドであれば書式も合わせて出力されます。