![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) ExcelVBAで他のExcelVBAを実行 2 2022/10/01 14:55
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XCOPYでネットワーク越しにコピ...
-
タスクスケジューラからショー...
-
タスクマネージャーの状態の取...
-
username以外でログイン名を知...
-
UACの権限昇格の確認ダイアログ...
-
eclipse の TasksにTODO が出ない
-
拡張子はなぜ、大文字と小文字...
-
Androidアルバムの画像を消去で...
-
Excelの「アクセシビリティ 検...
-
フォルダの中に1個しかファイ...
-
Windowsフォルダ内のファイルと...
-
ひとつのファイルを一括で複数...
-
softonicという物をダウンロー...
-
エクセルでの計算式もしくはシ...
-
Windows10 で登録した外字を他...
-
フォルダの並び替えの項目を固...
-
パソコンのスキップとは何ですか?
-
複数のフォルダへ同時にファイ...
-
Windows10のタスクスケジューラ...
-
DOSコマンドでファイルをコピー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XCOPYでネットワーク越しにコピ...
-
タスクスケジューラからショー...
-
eclipse の TasksにTODO が出ない
-
batファイルをアンダグラウンド...
-
再起動後必ず2つのエラーが出...
-
ログイン前にタスクにて実行し...
-
タスクの相関図のわかりやすい...
-
リエントラント関数
-
C#からタスクマネージャーの【...
-
cgiを使ったページが表示さ...
-
VisualStudioで静的コードチェ...
-
ExcelVBAからAccessのモジュー...
-
エミュレータ上での動作の検出
-
スケジュールタスクの設定
-
タスクマネージャーの状態の取...
-
μiTronでの割込み処理について
-
UACの権限昇格の確認ダイアログ...
-
FTP ダウンロードの中断
-
タスク、プログラム実行後に自...
-
0-1ナップザック問題の解き方が...
おすすめ情報