Access のインポート ウィザードでファイルからデータをインポートするとエラー メッセージが表示される
適用対象: Microsoft Office Access 2007Access 2010Access 2013
https://support.microsoft.com/ja-jp/help/2798515
現象
Access 2007、Access 2010、Access 2013 で、テキスト インポート ウィザードやワークシート インポート ウィザードを使用して、テキスト ファイルや Excel ファイルをインポートするとき、ファイルのパスもしくはファイル名に以下の全角文字を含んでいるファイルの場合、次のいずれかのエラー メッセージが表示されることがあります。
全角の不等号記号、アンド記号が対象。
字 Unicode
< U+FF1C
> U+FF1E
& U+FF06
- エラーメッセージ
'ExecuteTempImexSpec'メソッドは失敗しました: '_WizHook'オブジェクト
データベース ファイル '|1' が見つかりません
オブジェクト '<パス>\<ファイル名>.xls' が見つかりませんでした。オブジェクトが存在していること、名前やパス名が正しいことを確認してください。
'<パス>\<ファイル名>.xls' がローカル オブジェクトでない場合は、ネットワークの接続を確認するか、サーバー管理者に問い合わせてください。
パス '<パス>\<ファイル名>.xls' は正しくありません。パス名に間違いがないことと、ファイルが置かれたサーバーに接続していることを確認してください。
回避策
以下のいずれかの方法を実施します。
方法 1. ファイル名やフォルダ名を変更する
インポート元ファイルのファイル名やフォルダ名を、以下の全角文字を含まないように変更します。
<
>
&
例
変更前) ab<c.csv
変更後) abc.csv
方法 2. リンクテーブルとしてインポート後、ローカルテーブルに変更する
テキストファイルや Excel ファイルをリンクテーブルとてインポートし、その後、ローカルテーブルに変更します。
手順
- Access 2010 で .accdb ファイルを開きます
- [外部データ] タブ - [インポートとリンク] カテゴリ内の [テキスト ファイル]ボタンをクリックします。Excel ファイルをインポートする場合は、[インポートとリンク] カテゴリ内の [Excel] ボタンをクリックします
- [外部データの取り込み] ダイアログが表示されますので、インポート対象のファイルを指定して「リンク テーブルを作成してソース データにリンクする」を選択し、リンクテーブルを作成します
- 手順 3 で作成されたリンクテーブルをナビゲーション ウィンドウ上で右クリックし [コピー] を選択します。その後、右クリック - [貼り付け] を選択します
- [テーブルの貼り付け] ダイアログにて、"テーブル構造とデータ (ローカル テーブル) " を選択し [OK] をクリックします
方法 3. VBA を利用する
DoCmd.TransferText
メソッドやDoCmd.TransferSpreadsheet
メソッドを用いることで、ファイル名を変更することなく、ファイルをインポートすることが可能です。
サンプル
・以下のコードは、DoCmd.TransferText メソッドにて c:\test\import_data.csv
のデータを "Test" という名前のテーブルとしてインポートします。
DoCmd.TransferText acImportDelim, , "Test", "c:\test\import_data.csv", -1
・以下のコードは、DoCmd.TransferSpreadsheet
メソッドを用い、C:\test\test<2.xls
のデータを "Test2" という名前のテーブルとしてインポートします。
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "test2", "C:\test\test<2.xls", True
詳細
問題の再現手順
- Cドライブに、Test フォルダを作成し、「a<b.csv」というファイルを配置します
例 C:\test\a<b.csv - Access 2010 上で、.accdb ファイルを開きます。
- [外部データ] タブ - [インポートとリンク] カテゴリ内の [テキスト ファイル]ボタンをクリックします
- [外部データの取り込み] ダイアログにて、以下を設定し、[OK] をクリックします ファイル名: C:\test\a<b.csv 編注aとbの間に全角の不等号記号、aはbより小さいの意味を表す<が入っている
- 現在のデータベースの新しいテーブルにソース データをインポートする:チェックオン
- [テキスト インポート ウィザード] の [完了] ボタンをクリックします
結果
以下のエラー メッセージが表示されます。
'ExecuteTempImexSpec'メソッドは失敗しました: '_WizHook'オブジェクト
最終更新日: 2016/09/29
これからわかること
まずWizhook自体は存在している。さらにサードパーティ用ではなく、Microsoft自身がこれを使用している。Docmd.TranspherspreadSheetのときはこれがファイルを開いている。またこのことからDocmd.TranspherspreadSheetとは、ファイルを開く、変換するという複数の動作を含んだ命令だということになる。
またこのWizhookに言及しているMicrosoftのサイトは非公開だけに見つかっておらず、調査を開始して3週間目にようやくこのページを発見した。つまり現時点で公式がWizhookに触れた、たった一つのHPである。この違う言語版以外でWizhookに触れたものがあればご教示いただきたい。
この問いもWizhookを使用しているがQAサイトなのでカウントしない。
コンパイルエラー:メソッドまたはデータメンバーが見つかりません。
これに至ってはそもそも質問者がExcelとAccessが同じだと思っている。こういうひとにWizhookもあります、ネットで検索してくださいというのは相当鬼だと思う。
このように公式の解説は全くない。
全くないうえに、2007あたりでコマンドが増えている。
https://team-moeller.de/?Tipps_und_Tricks:Wizhook-Objekt
Wizhookについてまとめているドイツ語のサイト。
Wizhookはフランス語、ドイツ語圏ではちょくちょくヒットする。
しかしここですらたとえばOpenEmScriptはNo Dataである。
また日本語圏でオブジェクトブラウザからWizhookを出す方法はここしか解説が見つかっていない。
https://racchie.hatenablog.com/entry/2019/06/08/183000?utm_source=feed
追記 文字コードが不整合でも発生しうる(2020/04/11追記)
Accessでテキストデータインポート時にエラー発生「ExecuteTempImexSpecメソッドは失敗しました」 2018年8月4日 更新日 2020年3月27日
2015年2月2日月曜日 【Office Access】テキストインポートで謎メッセージを発して停まる 「ExecuteTempImexSpecメソッドは失敗しました」
ファイルの文字コード指定がオリジナルと違っていた。
Shift-JISのファイルをUnicodeで読み込もうとしていた。
これからすると文字コードが不整合な場合にも起きうるようだ。(2020/04/11追記)