AccessでExcelファイルをフォームのボタンからインポートするとき、DoCmd.TransferSpreadsheetを利用すると便利ですが、エラー3011が発生する場合があります。
エラー3011は、指定したテーブルやオブジェクトが見つからない場合などに発生することが多く、ファイルパスやインポート設定の指定ミスが原因になっているケースがあります。
この記事では、Access VBAでExcelデータを取り込む際に発生する3011エラーの原因と、TransferSpreadsheetを正しく使うための確認ポイントを解説します。
Accessのエラー3011とは何か
Accessのエラー3011は、指定したオブジェクトを見つけられない場合に表示されるエラーです。
DoCmd.TransferSpreadsheetでは、Excelファイルからデータを取り込む際に、取り込み先のテーブル名やファイル名、シート名などを正しく指定する必要があります。
例えば、VBAでTableNameに指定したテーブルがAccess内に存在しない場合や、Excelファイルの指定場所が間違っている場合にエラー3011が発生することがあります。
TransferSpreadsheetのFileName指定が間違っている可能性
提示されたコードでは、FileNameに以下のような指定があります。
FileName:="C:\Users\eiji1\OneDrive\Desktop"
この指定ではフォルダーまでしか指定されておらず、インポート対象となるExcelファイル名が含まれていません。
DoCmd.TransferSpreadsheetのFileNameには、フォルダーではなくExcelファイルのフルパスを指定する必要があります。
例えば、デスクトップに「出荷実績.xlsx」というファイルがある場合は、以下のように指定します。
FileName:="C:\Users\eiji1\OneDrive\Desktop\出荷実績.xlsx"
ファイル名まで指定することで、Accessが対象のExcelデータを見つけられるようになります。
TableNameで指定しているテーブルの存在を確認する
TransferSpreadsheetでは、TableNameに指定した名前のテーブルへExcelデータを取り込みます。
例えば、以下のコードの場合はAccess内に「10日までの出荷実績」という名前のテーブルが必要です。
TableName:="10日までの出荷実績"
テーブル名に余計なスペースが入っていたり、漢字や記号が実際の名前と異なっていたりすると、Accessは別の名前として判断します。
ナビゲーションウィンドウでテーブル名を確認し、VBAの指定と完全に一致しているか確認してください。
Excelファイルのシート名にも注意する
Excelファイルをインポートする場合、取り込み対象のシート名が一致しているか確認する必要があります。
TransferSpreadsheetでは、必要に応じてRange引数を指定してExcel内の特定シートや範囲を指定できます。
例えばExcelのシート名が「Sheet1」ではなく「出荷データ」になっている場合、指定を間違えるとデータ取得に失敗する可能性があります。
Excelファイルを開き、実際のシート名を確認してからVBAを設定するとトラブルを防げます。
フォームボタンから実行する場合の修正版コード例
フォーム上のボタンからExcelファイルを取り込む場合は、ファイル名まで含めたパスを指定します。
例として、以下のようなコードになります。
Private Sub コマンド2_Click()
DoCmd.TransferSpreadsheet _
TransferType:=acImport, _
SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
TableName:="10日までの出荷実績", _
FileName:="C:\Users\eiji1\OneDrive\Desktop\出荷実績.xlsx"
MsgBox "インポートが完了しました。", vbInformation
End Sub
実際に使用する場合は、Excelファイル名やテーブル名を自身の環境に合わせて変更してください。
OneDrive上のファイルを扱う場合の注意点
OneDrive上のファイルを指定する場合、同期状態によってAccessからファイルが見えないことがあります。
特にオンラインのみの状態になっているファイルは、ローカルパソコン上に存在しないため、インポートできない場合があります。
対象のExcelファイルを右クリックして「このデバイス上で常に保持する」に設定し、ローカル保存された状態で実行すると安定します。
まとめ|Accessの3011エラーはパスや名前指定を確認する
AccessのDoCmd.TransferSpreadsheetでエラー3011が発生した場合は、まずExcelファイルのパス、取り込み先テーブル名、シート名を確認することが重要です。
特にFileNameにはフォルダーではなくExcelファイル名まで含めた完全なパスを指定する必要があります。
VBAによるExcelインポートは便利な機能ですが、指定する名前や場所が少しでも違うとエラーになります。各項目を正確に確認することで、フォームからの自動インポート処理を正常に動作させることができます。


コメント