
Access VBAでエクセルシートをテーブルに読み込むプログラムを作成中で、目的の動作は
実現できたのですが処理完了してもコピー元エクセルシートにロックがかかったままで、
タスクマネージャを見るとエクセルプロセスが残っている事が分かり、プロセスキルの方法
をWebで色々検索してみたのですが解決方法が分からずどなたかアドバイス頂けないでしょうか?
宜しくお願いします。
<試した事>
WorkbookをClose、ExcelアプリオブジェクトをQuitしても駄目でした。
ReleaseComObjectをCreateObjectした順と逆に使用するとプロセスキルできると
あったのですがこちらは投稿者環境のメソッド一覧に存在せずエラーとなりました。
<投稿者環境>
Visual Basic for Applications 7.1 Version1119
Microsoft 365 Apps for enterprise 16.0.13801.21214
ドットネットフレームワークのインストールはアプリ一覧になし
当該ソースコード本文に記載したところNTTレゾナントの検閲でひっかかってしまった
のでスクリーンショットを添付します。
エディタコピーでなく手打ちコピーしたので誤字あったらごめんなさい。

No.2ベストアンサー
- 回答日時:
こんにちは。
ご質問のようなオートメーションを使った処理の場合、オブジェクト変数をちゃんと破棄した方が良い気がします。
bk.Close: Set bk = Nothing
exap.Quit: Set exap = Nothing
でどうなりますか?
余談ですが、ブックを開かずにADODBを使って直接データをテーブルにインポートする方法もあります。
こちらの方がゴーストプロセスに悩まされなくて良いかもしれません。
教えていただいた通りに破棄処理を加えたところ処理完了後にエクセルのバックグラウンドプロセスが消えている事を確認できました、助かりました、ありがとうございます。
ADODBというのがあるんですね、調べてみます。
Excelオブジェクトだとオブジェクト作成時に時間もかかりますし、こういった後処理の手間の不確実性があることが分かったので次からは検討したいとおもいます。
No.4
- 回答日時:
Access VBA のサンプルソースです。
Sub testProc()
'↓ここで表示するダイアログのオブジェクト変数は Access 管理下
' Nothing し忘れても Access が自動破棄してくれます
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.AllowMultiSelect = False
.InitialView = msoFileDialogViewDetails
.Filters.Clear
.Filters.Add "Excelファイル", "*.xls; *.xlsx; *.xlsm", 1
End With
If fd.Show <> -1 Then '<-- [x][Cancel]ボタンは0
Exit Sub
End If
'↓これより下のオブジェクト変数は Excel 管理下なので Access
' が自動破棄してくれません。
' 漏れなく破棄しないとプロセスが残ります。エラー処理含めて。
Dim xlApp As Object ' 破棄必須 Excel Application
Dim wb As Object ' 破棄必須 Excel Workbook
Dim sh As Object ' 破棄必須 Excel Worksheet
On Error GoTo Err_
'↓ここでプロセスが起動します
Set xlApp = CreateObject("Excel.Application")
'非表示で起動するので、表示したいときは
xlApp.Visible = True
'ここに処理
Set wb = xlApp.Workbooks.Open(fd.SelectedItems(1))
Set sh = wb.Worksheets("Sheet1")
'(略)
Bye_:
On Error Resume Next
' 破棄する順は下流から上流へを守らないと
' オートメーションエラーが発生する
Set sh = Nothing
wb.Close: Set wb = Nothing
xlApp.Quit: Set xlApp = Nothing
Exit Sub
Err_:
MsgBox Err.Description, vbCritical
Resume Bye_
End Sub

No.3
- 回答日時:
エクセルのメソッドを実行するときは必ずエクセルアプリケーション由来のオブジェクト変数を使用しなければならないのに、それが1カ所でももれているとプロセスが残ります。
省略されている部分にそのような場所がないか丹念に探すしかありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- Excel(エクセル) シートが違う2枚のエクセルシートにある数値を別シートにコピーしたい(VBA?) 8 2022/03/31 12:24
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) エクセルで保存時に全部のシートの最終行をコピーして数値で貼り付けたい 3 2023/08/14 15:49
このQ&Aを見た人はこんなQ&Aも見ています
-
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
Access からオブジェクトとして開いたExcelのプロセスが終了しない
その他(データベース)
-
5
Excelプロセスが消えない
Visual Basic(VBA)
-
6
ExcelVBAにてアプリをタスクマネージャーから強制終了させたいのですが
Visual Basic(VBA)
-
7
Access VBA [リモートサーバーがないか使用できる状態ではありません]
Access(アクセス)
-
8
Excelのプロセスが消えません
Excel(エクセル)
-
9
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
10
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
11
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
-
12
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
13
アクセスからエクセルのシートを追加して、名前をつける方法
Excel(エクセル)
-
14
ACCESSのVBAにてExcelのシートをコピーしたい
その他(データベース)
-
15
Access サブフォームでの選択行の取得
その他(データベース)
-
16
ACCESSのVBで、エクセルファイルの最終行を取得
Excel(エクセル)
-
17
Access終了時にマクロまたはVBAの実行したい
その他(Microsoft Office)
-
18
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
19
AccessVBAで作成したExcelファイルを削除する方法は?
Visual Basic(VBA)
-
20
レコードを保存するコード アクセスvba
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access VBAから使用したExcelプ...
-
Ctrl + Cなど複数の入力キー...
-
C++言語で、構造体のコピーは可...
-
Eclipseのコード入力時の、行コ...
-
Activesheet.Pasteで困っています
-
jakarta poiを使用し、EXCELの...
-
DataTableに入っているデータを...
-
Listviewに表示された文字のコ...
-
一行おきに貼り付ける 可能でし...
-
文字列の切り出し
-
excel vba シートがなければコ...
-
EXCEL VBAで複数行のコピー(...
-
【再質問】Eclipseのコード入力...
-
【UWSC】WEBページ内コピーした...
-
ASP.net でコントロールをコピー
-
Debug版とRelease版で結果が変わる
-
バッチで当日日付で作成される...
-
他プロジェクトのFormを自プロ...
-
マウントしたディスクにcpで、...
-
Excelでコピーしたセル(テキス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access VBAから使用したExcelプ...
-
C++言語で、構造体のコピーは可...
-
マウントしたディスクにcpで、...
-
Ctrl + Cなど複数の入力キー...
-
Eclipseのコード入力時の、行コ...
-
DataTableに入っているデータを...
-
Activesheet.Pasteで困っています
-
Listviewに表示された文字のコ...
-
一行おきに貼り付ける 可能でし...
-
arduino unoからデータを読み出...
-
【UWSC】WEBページ内コピーした...
-
jakarta poiを使用し、EXCELの...
-
文字列の切り出し
-
Debug版とRelease版で結果が変わる
-
シートに張り付けたボタンがシ...
-
Excelでコピーしたセル(テキス...
-
バッチで当日日付で作成される...
-
VBScript でサブフォルダも含め...
-
エクセルVBA 実行時エラー'...
-
CStringArray[2]のコピー
おすすめ情報