準・究極の選択

エクセルのデータ(列数、行タイトルは都度かわる)をアクセスにインポートしテーブルを作成したいと思っています。
VBAでこの処理をおこないたく、下記のコードで実行したのですがデバッグがはしってしまいます。
(DとEでデバッグ)
原因がお分かりになる方がおりましたら、教えていただけますでしょうか?
何卒、よろしくお願い申し上げます。


Function ExcelDataImport()

'On Error GoTo エラー

Dim varac As Variant
Dim varxls As Variant
Dim strrange As String
Dim strmsg As String

varac = "T_TESTTABLE" ' --- A

varxls = "C:\Users\AC\Desktop\ACTEST\RAWDATA.xlsx" ' ---B

strrange = "TEST_RAWDATA" ' --- C

strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & _
"へ、データ入力を行います。" & Chr(13) & _
"Excelファイルの入力レンジは、 " & strrange & " です。"

DoCmd.DeleteObject acTable, varac ' --- D
If MsgBox(strmsg, vbOKCancel) = vbOK Then

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
varac, varxls, True, strrange ' -- E

MsgBox "データ入力は、正常に完了しました。"

End If

Exit Function

エラー:

MsgBox "予期せぬエラーが発生しました。" & Chr(13) & _
"エラー番号:" & Err.Number & Chr(13) & _
"エラー内容:" & Err.Description, vbCritical
Exit Function

End Function

A 回答 (2件)

> varac = "T_TESTTABLE"


> DoCmd.DeleteObject acTable, varac
データベースに"T_TESTTABLE"は存在していますか?存在していなければ、削除できずにエラーとなります。

> varxls = "C:\Users\AC\Desktop\ACTEST\RAWDATA.xlsx
> DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9,varac, varxls, True, strrange
アクセスのバージョンとインポートするエクセルファイのバージョンは何でしょうか?"ACTEST\RAWDATA.xlsx"は、拡張子から推察するとエクセル2007以上のバージョンで作成されていると思われます。引数"acSpreadsheetTypeExcel9"は、エクセル2000形式のワークシートの種類を指定するために使用します。
    • good
    • 0
この回答へのお礼

tate san 様

早々のご回答をいただき、ありがとうございました。
おっしゃる通り、引数"acSpreadsheetTypeExcel12xml"へ変更し
ファイル名の後に"!"をつけたところ、無事に実行されました。

imogasi 様のおっしゃる通り、タイトルと質問内容があっていなくわかりにくい
文章だったのにも関わらず、的確なご回答をいただき大変感謝しております。
ありがとうございました。

お礼日時:2011/10/06 21:32

エクセル・アクセスではエクスポートとインポートという対立用語があります。


エクセル側では、
・インポートに当たるのは、データー外部データの取り込みです
・エクスポートに当たるのはーー存在しない?
アクセス側では
・インポート
・エクスポート
とも操作、マクロやVBAやできます。
ーーー
質問はどちらの方でやるのか?自分の質問の文章をよく読んでください。揺れていて、判りにくい。
掲載コードでDoCmdを使っているところから、アクセスVBAらしい。
それなら質問の標題を変えるべきでしょう。
「アクセスVBA エクセルからインポート」という風に。標題だけの問題だと、侮る無かれ、後世までこの質問がGoogleなどで見られる恐れがあるのだ。
エクセルのバージョンも書いてなくて、acSpreadsheetTypeExcel9と、xlsxと矛盾しているようだ。
何かをそのままコピーしたためではないか?
ーー
アクセス側でエクセルファイルをインポートするなら、Googleででも「アクセス VBA  インポート エクセル」で照会すれば
沢山(膨大な数の)記事が出る。
ーー
セル範囲の指定は
Private Sub test01()
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "01化", "01化.xls", True, "Sheet1!A1:D3"
End Sub
で出来た(2003まででのテストだが)
    • good
    • 0
この回答へのお礼

imogasi 様

ご回答いただき、ありがとうございます。
おっしゃるとおり、質問内容にあっているタイトルは「アクセスVBA エクセルからインポート」でした。
エラーがでてしまったのも引数"acSpreadsheetTypeExcel9"でした。
"12xml"へ修正したところ、うまく実行できました。
急ぎの要件でACCESSのVBAを使用しなくてはならず、自分のやりたいことをネット検索して
コピペしてからコードをの内容をひもといていってたのですが、なかなかちゃんと理解できず
エラーの原因がわかりませんでした。

支離滅裂な質問にご回答いただき、誠に感謝しております。
ありがとうございました。

お礼日時:2011/10/06 21:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報