
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で質問しましょう!
この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
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
10
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
11
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
-
12
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
13
アクセスからエクセルのシートを追加して、名前をつける方法
Excel(エクセル)
-
14
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
15
ACCESSのVBで、エクセルファイルの最終行を取得
Excel(エクセル)
-
16
ACCESSのVBAにてExcelのシートをコピーしたい
その他(データベース)
-
17
Access サブフォームでの選択行の取得
その他(データベース)
-
18
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
19
AccessVBAで作成したExcelファイルを削除する方法は?
Visual Basic(VBA)
-
20
Access VBAからExcelシートの削除
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Ctrl + Cなど複数の入力キー...
-
Eclipseのコード入力時の、行コ...
-
マウントしたディスクにcpで、...
-
【UWSC】WEBページ内コピーした...
-
VBScript でサブフォルダも含め...
-
C++言語で、構造体のコピーは可...
-
テーブルのコピーについて
-
web page の表を word に貼り...
-
バッチで当日日付で作成される...
-
一行おきに貼り付ける 可能でし...
-
jakarta poiを使用し、EXCELの...
-
VB.netでフォームをコピーして...
-
Access VBAから使用したExcelプ...
-
DataTableに入っているデータを...
-
ROBOCOPYをスペース付きのフォ...
-
JP1の質問です。
-
エクセルVBA 実行時エラー'...
-
vs codeでコードを書いていると...
-
シート間のコピー時の列幅と行...
-
Excel-VBA でSheet1という記述...
マンスリーランキングこのカテゴリの人気マンスリー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]のコピー
おすすめ情報