ここから質問投稿すると、最大4000ポイント当たる!!!! >>

いつもお世話になっています。
EXCELに設置したコマンドボタンを押したらEXCELからACCESSへデータをインポートする、というVBAコードを書きました。
ですがインポート先のACCESSはSHIFTを押しながらでないとデータベースを開かないようにしてあります。
それだからなのか、下記のコードではうまくいきません。
うまくいかない内容は、エラー表示は出ませんがインポート先のACCESSと同じ名前の不明なファイルがすぐそばにでき、ファイル自体も開かなくなってしまいます。
これ自体はパソコンを再起動させると不明ファイルは消えてしまいます。

ACCESSを開かずにVBAでデータをインポートするにはどうしたらいいのでしょうか?
どうか解られる方がいらっしゃいましたら教えてください。
よろしくお願い致します。

コード:
Dim objACCESS As Object

'Accessのアプリケーションオブジェクトを作成する
Set objACCESS = CreateObject("Access.Application")

'ファイルを開く
objACCESS.OpenCurrentDatabase "C:\Documents and Settings\All Users\デスクトップ\" & "個人記録(仮).mdb"

On Error GoTo マクロ1_自動でインポート_Err
objACCESS.DoCmd.OpenQuery "DEL_MOTO_DATA", acNormal, acEdit
objACCESS.DoCmd.TransferSpreadsheet acImport, 8, "個人記録(仮)", "C:\Documents and Settings\All Users\デスクトップ\個人記録(仮).xls", True, ""
マクロ1_自動でインポート_Exit:
Exit Sub

マクロ1_自動でインポート_Err:
MsgBox Error$
Resume マクロ1_自動でインポート_Exit
Exit Sub

objACCESS.Visible = True ' Accessを表示ON

MsgBox "終了しました"


End Sub

参考にしたURL:http://www.ken3.org/vba/backno/vba128.html

このQ&Aに関連する最新のQ&A

A 回答 (3件)

一歩前進のご様子でなによりです。


もしなにかあれば、
修正版のコードも一緒にアップしてみてください。
    • good
    • 0

Set objACCESS = CreateObject("Access.Application")


作成した後に閉じていませんよ。タスクマネージャにAccessのゾンビが残ってるはず
Set objACCESS = Nothing 'いちばん最後の方に入れてください

objACCESS.OpenCurrentDatabase ・・・
開いたら閉じて
objACCESS.CloseCurrentDatabase ・・・

objACCESS.DoCmd.OpenQuery "DEL_MOTO_DATA", acNormal, acEdit
クエリ DEL_MOTO_DATA の編集は必要なのですか? -----------Q1
objACCESS.Visible = True
インポート処理の後でアクセスの操作を行いますか?---------Q2

エラー処理は、『出来た!完璧だ!』
と思ってから追加したほうがいいですよ。

この回答への補足

マクロ1_自動でインポート_Exit:
Exit Sub

マクロ1_自動でインポート_Err:
MsgBox Error$
Resume マクロ1_自動でインポート_Exit
Exit Sub


の部分を消したらうまくいきました。
ありがとうございます!

補足日時:2010/11/29 10:41
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
最後の式にSet objACCESS = Nothing 'いちばん最後の方に入れてください、を入れて見ましたが、ゾンビが残ったままでした。


>objACCESS.DoCmd.OpenQuery "DEL_MOTO_DATA", acNormal, acEdit
>クエリ DEL_MOTO_DATA の編集は必要なのですか? -----------Q1
DEL_MOTO_DATA でテーブルの中身を一度消してインポートしていますのでこの式には必要だと思います。

>objACCESS.Visible = True
>インポート処理の後でアクセスの操作を行いますか?---------Q2
できれば、データ入っているかの確認をしたいので操作したいです。

お礼日時:2010/11/29 08:05

どこかに問題があって、ロックファイルが出来てしまうのでしょうか。


試してみましたが、下記コードで動作しました。
ただ、最後の2行を通る事があるのか?ですが。
ご参考まで。

Sub test()
Dim objACCESS As Object
Const acNormal As Long = 0
Const acImport As Long = 0
Const acEdit As Long = 1

Set objACCESS = CreateObject("Access.Application")
objACCESS.OpenCurrentDatabase ThisWorkbook.Path & "\" & "test.mdb"
ThisWorkbook.Save
On Error GoTo importError
objACCESS.DoCmd.OpenQuery "Q_clearTable1", acNormal, acEdit
objACCESS.DoCmd.TransferSpreadsheet acImport, 8, "table1", ThisWorkbook.Path & "\" & ThisWorkbook.Name, True, ""
import_Exit:
Exit Sub

importError:
MsgBox Err.Number & ":" & Err.Description
Resume import_Exit
objACCESS.Visible = True
MsgBox "終了しました"
Exit Sub
End Sub

参考URL:http://www.microsoft.com/japan/technet/scriptcen …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
コードまで書いていただいてうれしいです。
ですが、なぜかこのコードでもゾンビが残ってしまいます。
なぜでしょうか?

SHIFTキーを使用して開くデータベースにインポートするときはなにか違う方法じゃなくてはいけないのでしょうか?
なかなかうまくできないので悲しいです。

お礼日時:2010/11/29 08:13

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


人気Q&Aランキング