4

私の目的は、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")

それでも同じエラーメッセージが表示されます。

シートの名前を変更することはできません。元の名前 (末尾に _ を含む名前) を使用してデータを取得するにはどうすればよいですか?

ありがとうございました。

4

2 に答える 2

1

スプレッドシートを別の名前で保存できるはずです。私は CSV ファイルをインポートするときにこれを行いますが、実際には Excel ファイルの方が簡単です。

bRename = false
while right(c_source_austrianNetImports) = "_" ' rename workbook
    c_source_austrianNetImports = left(c_source_austrianNetImports,len(c_source_austrianNetImports-1)
    bRename = True
wend 
if bRename then 
    ActiveWorkbook.SaveAs c_source_austrianNetImportst, xlWorkbookNormal 
endif
于 2014-01-03T18:21:41.253 に答える