私の目的は、Excel ファイルから Access DB にデータをインポートすることです。そうするために、私は次のようにDAOを使用しています:
Debug.Print "Starting process to import the " & numberOfDaysToImport & " missing days"
Set sourceDB = OpenDatabase(c_sourceFile_austrianNetImports, False, True, "Excel 8.0;")
DoEvents
Set rs = sourceDB.OpenRecordset(c_sqlRetrieveAustriaNetImports)
Debug.Print "Recordset Field Count = " & rs.Fields.Count
c_source_austrianNetImports
およびc_sqlRetrieveAustriaNetImports
はそれぞれ、Excel ソース ファイルへのパスを含む文字列変数と、データの取得に使用される SQL Select ステートメントです。
私の問題は、Excel ソース ファイルのシート名がアンダースコアで終わると、SQL Select クエリが機能せず、VBA がクラッシュすることです。たとえば、データを取得したいシートが呼び出されEEX_EXC_Scheduled_PWR_AUT_H1_A_
、VBA がメッセージでクラッシュしたc_sqlRetrieveAustriaNetImports
場合SELECT * FROM [EEX_EXC_Scheduled_PWR_AUT_H1_A_$A1:H65536]
- ランタイム エラー '3011' Microsoft Jet データベース エンジンはオブジェクト 'EEX_EXC_Scheduled_PWR_AUT_H1_A_$A1:H65536' を見つけることができませんでした オブジェクトが存在すること、およびその名前とパス名のスペルが正しいことを確認してください。
最後のアンダースコアを削除してシートと SQL ステートメントの名前を変更すると、機能します。また、使用してレコードセットを開こうとしました
Set rs = sourceDB.OpenRecordset("Sheet$13")
それでも同じエラーメッセージが表示されます。
シートの名前を変更することはできません。元の名前 (末尾に _ を含む名前) を使用してデータを取得するにはどうすればよいですか?
ありがとうございました。