
ExcelVBAからAccessのモジュールを実行したいのですが、
終了した後、タスクマネージャにExcelが残ってしまいます。
ExcelVBAは下記の通りです。
Dim objAccess As Object
Dim strAccessPath As String
strAccessPath = ThisWorkbook.Path & "\a.mdb"
Set objAccess = CreateObject("Access.Application")
objAccess.Opencurrentdatabase objAccessPath
objAccess.Run "モジュール1"
objAccess.closecurrentdatabase
objAccess.Quit
Set objAccess = Nothing
です。
モジュールの内容は、
1.ExcelのシートをAccessにインポート
2.選択クエリでテーブルとの差分を抽出しグループ化
3.クエリをエクスポートする
です。
objAccess.Run "モジュール1"
をしなければExcelが残らないようなので
Run以外の方法でモジュールを実行する方法をご教授ください。
(つたない説明でわかりにくい点あると思います。ご指摘ください)
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ANo.1 です。
補足された Access のコードを使用したのですが、やはり Excel が残ることはありませんでした。
コードを見た限り、何か問題になるような記述はないように思います。
気になった点を挙げておきます。
1. Access の標準モジュールに記述しているのか?
2. Function を使用しているが、これには理由があるのか?
(Function は返り値がある場合に使用します。返り値がない場合は Sub を使用します。)
3. タスクマネージャに残ってしまうのは、アプリケーション自体なのか、それとも何かのプロセスなのか?
4. Access 側で補足されたコードを実行した場合に何か問題は生じていないのか?
この回答への補足
回答ありがとうございます。
>1. Access の標準モジュールに記述しているのか?
はい、標準モジュールに記述しています。
>2. Function を使用しているが、これには理由があるのか?
(Function は返り値がある場合に使用します。返り値がない場合は Sub を使用します。)
返り値はないので Sub に変更します。ありがとうございます。
>3. タスクマネージャに残ってしまうのは、アプリケーション自体なのか、それとも何かのプロセスなのか?
これはどのように確認すればよいのでしょうか。
タスクマネージャには EXCEL.EXE とあります。
>4. Access 側で補足されたコードを実行した場合に何か問題は生じていないのか?
EXCELVBA 記述内の
objAccess.Run "モジュール1"
をコメントアウトし実行した後、 ACCESS を立ち上げてモジュール1を実行した場合には EXCEL は残りませんでした。
問題はないように思います。
気がついた点1
タスクマネージャに EXCEL が残っている状態で、
A.xls の VBE を開いたときに、プロジェクトエクスプローラに
VBAProject(A.xls)は2つあり、
VBAProject(PERSONAL.xls)がないことに気が付きました。
気がついた点2
質問文中の objAccessPath は strAccessPath の誤りでした。
すいませんでした。
irija_bariさんの環境で再現されないということは
コード以外に原因があるということになるのでしょうか。
No.1
- 回答日時:
試してみましたが、Excel のタスクが残るようなことはありませんでした。
1. hoge1.xls, hoge2.xls, hoge.mdb を作成
2. hoge.mdb に hoge1.xls からインポートし、 hoge2.xls にエクスポートする
Sub を記述
3. hoge1.xls に hoge.mdb の Sub を実行するマクロを記述
4. hoge1.xls のマクロを実行
という手順で行いました。hoge.mdb のエクスポート先を hoge1.xls にすると hoge1.xls の
マクロ実行時にエラーが出てしまいました。
hoge1.xls のマクロ実行後に Excel のタスクが残ってしまうことはありませんでした。
Access でどのような記述をしているのでしょうか?
具体的なコードを出してもらったほうがアドバイスがしやすいです。
この回答への補足
irija_bariさん、回答ありがとうございます。
以下、Accessの記述です。
Function モジュール1()
Dim db As DAO.Database
Dim LoadFilePath As String 'インポートするブック
Dim SaveFilePath As String 'エクスポート先のフォルダ
Dim i As Integer
LoadFilePath = CurrentProject.Path & "\A.xls"
SaveFilePath = CurrentProject.Path & "\保存\"
Set db = CurrentDb
'インポートするシート(Sheet1)が既にあれば削除
For i = 1 To db.TableDefs.Count - 1
If db.TableDefs(i).Name = "Sheet1" Then
db.TableDefs.Delete "Sheet1"
End If
Next
'Sheet1のインポート
DoCmd.TransferSpreadsheet acImport, _
acSpreadsheetTypeExcel9, "Sheet1", LoadFilePath, True
'クエリ1のエクスポート
DoCmd.TransferText acExportDelim, , "クエリ1", _
SaveFilePath & Replace(Date, "/", "") & "データ1.csv", True
'Sheet1テーブルの削除
DoCmd.DeleteObject acTable, "Sheet1"
db.Close: Set db = Nothing
End Function
以下、クエリ1の内容です。
Sheet1と既存テーブルとのコードの差分を抽出しています。
SELECT Sheet1.コード FROM Sheet1
LEFT JOIN 既存テーブル ON Sheet1.コード = 既存テーブル.CODE
GROUP BY Sheet1.CODE,既存テーブル.CODE
HAVING (((既存テーブル.CODE) Is Null));
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タスクスケジューラからショー...
-
XCOPYでネットワーク越しにコピ...
-
再起動後必ず2つのエラーが出...
-
XPのタスクスケジューラについて
-
username以外でログイン名を知...
-
拡張子はなぜ、大文字と小文字...
-
フォルダの並び替えの項目を固...
-
フォルダの中に1個しかファイ...
-
ひとつのファイルを一括で複数...
-
エクセルでの計算式もしくはシ...
-
Windowsフォルダ内のファイルと...
-
Excelの「アクセシビリティ 検...
-
複数のフォルダへ同時にファイ...
-
Windows10のタスクスケジューラ...
-
フォルダーのプロパティで表示...
-
Windows10使用中。「同名ファイ...
-
ファイルの開き方(拡張子なし)
-
Googleアカウントが削除されて...
-
windows (ウィンドウズ) の 「...
-
dirコマンド一文ででフォルダの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タスクスケジューラからショー...
-
XCOPYでネットワーク越しにコピ...
-
eclipse の TasksにTODO が出ない
-
batファイルをアンダグラウンド...
-
タスクの相関図のわかりやすい...
-
再起動後必ず2つのエラーが出...
-
無限ループでDebug.Writelineし...
-
μiTronでの割込み処理について
-
リエントラント関数
-
タスク、プログラム実行後に自...
-
タスクマネージャーの状態の取...
-
Excel VBA Do~Loop時のドラッ...
-
コマンドでLAN上のPCにフォルダ...
-
実行中のSendkeysのVBSを途中で...
-
VBSでファイル作成をするとき
-
XPのタスクスケジューラについて
-
パソコンの反応が急に遅くなっ...
-
エミュレータ上での動作の検出
-
UACの権限昇格の確認ダイアログ...
-
FTP ダウンロードの中断
おすすめ情報