こんばんは。
フォームにボタンを設置して、そのボタンをクリックすると
既存のアクセスファイルを開くようにしているのですが
そのアクセスファイルを終了させてもタスクマネージャーのプロセスタブの
MSACCESS.EXE*32
がいつまでも残ってしまいます。
VBのフォームを閉じると、MSACCESS.EXE*32は消えます。
VBのコードは、
Private Sub cmb_Access_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_Access.SelectedIndexChanged
Call AccessOpen()
End Sub
------------------------------
標準モジュール
Sub Access_Open()
Dim AccApp As Access.Application
Dim MyPath As String
MyPath = "C:\test.accdb"
AccApp = CreateObject("Access.Application")
AccApp.OpenCurrentDatabase(MyPath)
AccApp.Visible = True
AccApp.UserControl = True
AccApp = Nothing
End Sub
です。
VBのフォームから
test.accdbを開く→閉じるを繰り返してると、
プロセスが溜まってしまって、アクセスでエラーが起こります。
なので、VBからアクセスを開いて閉じてたら、
プロセスも終了させるようにしたいのですが、
どうすればいいでしょうか?
ご回答よろしくお願いします。
No.1ベストアンサー
- 回答日時:
VB 7.0 (=VB.NET 2002)以降のVisual Basicでは,それ以前のVisual Basicに比べ,COMの取り扱いが煩雑になっています。
・Nothingの代入はCOMの解放を意味しません。フィールド変数への代入などを除くと,通常無意味です
・COMのオブジェクトは,全て,確実に System.Runtime.InteropServices.Marshal.ReleaseComObject を呼び出して解放する必要があります
今回の場合,
> AccApp = Nothing
のかわりに,
System.Runtime.InteropServices.Marshal.ReleaseComObject(AccApp)
としてください。
これにより,IUnknown.Releaseが呼び出されて参照カウントが減少し,Accessへの参照がなくなります。
AccApp = Nothingは無意味なのですか。
System.Runtime.InteropServices.Marshal.ReleaseComObject(AccApp)
に変更して確認したら、ちゃんとタスクマネージャーから消えました!
ありがとうございました。大変参考になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 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) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
API関数 GetExitCodeProcess
-
プロセスのアタッチ・デタッチ...
-
プロセスIDからウィンドウハ...
-
ADOでアクセスのレコードに...
-
explorer.exeが異様にメモリを食う
-
他のコンピュータのプロセスを取得
-
タスクマネージャーのプロセス...
-
ShellExecuteが起動したプロセ...
-
他のアプリケーションをクリッ...
-
怪しいプロセス教えてください。
-
IISがフリーズ
-
VB6.0 SHELLで起動...
-
WebBrowserでPDF表示でのトラブル
-
セマフォとmutexの違いは?
-
プロセスIDの取得方法について
-
誤ってプロセスの終了をしてし...
-
非表示になったエクセルは?
-
デスクトップ上のアイコン名の...
-
バイナリ→構造体
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
explorer.exeが異様にメモリを食う
-
タスクマネージャーのプロセス...
-
プロセスのアタッチ・デタッチ...
-
C#でのbatファイル実行結果取得
-
VB6.0 SHELLで起動...
-
ADOでアクセスのレコードに...
-
Windowsでのfork方法
-
非表示になったエクセルは?
-
共有メモリの同時アクセスにつ...
-
プロセスIDからウィンドウハ...
-
プロセスIDの取得方法について
-
C++のプログラムをバックグラウ...
-
C++でシェルを起動
-
Linuxでのスレッド間メッセージ...
-
OSPFでプロセスを分ける意義に...
-
怪しいプロセス教えてください。
-
Process.Startの戻り値を後で取得
-
SendMessageが失敗するときがある
-
ウィンドウのタイトルからプロ...
おすすめ情報