質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

3回答

2806閲覧

ExcelのvbaでAccessを実行すると何故かAccessのプロセスが残ってしまう

hisa_1224

総合スコア21

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

1クリップ

投稿2019/02/25 06:11

前提・実現したいこと

Accessのプロセスを残したくない

発生している問題・エラーメッセージ

添付のソースコード(一部省略)を実行すると
何故かAccessのプロセスが残ってしまう

該当のソースコード

Excel vba

Public Sub CommandButton1_Click() ' Accessの設定 Dim accDbName As String ' Accessファイル名 Dim accPath As String ' Accessファイルパス Dim accDb As String ' Accessファイルパス+ファイル名 Dim accDb2 As String 'Accessファイル最適化に使用 ' Accessファイルパス accPath = ThisWorkbook.Worksheets("設定").Cells(2, 2) ' Accessファイル名 accDbName = ThisWorkbook.Worksheets("設定").Cells(3, 2) ' Accessファイルパス+ファイル名 accDb = accPath & "\" & accDbName 'ファイルシステムを扱うオブジェクトを作成 Dim objFileSys As Object Set objFileSys = CreateObject("Scripting.FileSystemObject") ' Accessファイルのバックアップコピーを作成 ' 元のファイル名+西暦+月日+時間で作成 FileCopy accDb, accPath & "\" & objFileSys.GetBaseName(accDb) & "_" & Format(Now, "yyyymmddHHMMSS") & ".accdb" ' Excelの設定 Dim wb As Workbook Dim sPath ' ブックファイルパス Dim sht As String ' 参照シート Dim fileName ' エクセルファイル名 ' 開くブックを指定 sPath = TextBox1.Text ' ファイルパスからファイル名を取得 fileName = Dir(sPath) ' ワークシート名を取得 sht = ThisWorkbook.Worksheets("設定").Cells(4, 2) ' 読み取り専用で開く Set wb = Workbooks.Open(fileName:=sPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) ' 開いたエクセルを非表示 ActiveWindow.Visible = False ' 取込ワークシートを指定 'fileName.Worksheets (sht) Dim adoCn As Object 'ADOコネクションオブジェクト Dim adoRs As Object 'ADOレコードセットオブジェクト Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションのオブジェクトを作成 Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成 adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & accDb & ";" 'Accessファイルに接続 ' 取込み開始行の設定 Dim i As Long Dim j As Long ' 物質と品目IDの設定 Dim kID As Long Dim hID As Long With adoRs ' access クエリ実行 ' access Table削除 .Open "d化学物質", adoCn .Open "d含有化学物質", adoCn .Open "d品目", adoCn ' access Table再生成 .Open "c化学物質", adoCn .Open "c含有化学物質", adoCn .Open "c品目", adoCn ' 品目マスタに登録 i = 7 .Open "品目マスタ", adoCn, adOpenKeyset, adLockOptimistic 'レコードセットを開く Do While wb.Worksheets(sht).Cells(i, 4).value <> "" .AddNew 登録処理 .Update i = i + 1 Loop ' レコードセットを閉じる .Close ' 化学物質マスタに登録 j = 13 xCount = 0 .Open "化学物質マスタ", adoCn, adOpenKeyset, adLockOptimistic 'レコードセットを開く ' プログレスバーの初期化 rowsDataNow = 0 Do While wb.Worksheets(sht).Cells(1, j).value <> "" .AddNew 登録処理 .Update j = j + 1 Loop ' レコードセットを閉じる .Close i = 7 j = 13 ' 物質IDと品目IDの値を設定 kID = 1 hID = 1 ' 品目含有化学物質マスタに登録 .Open "品目含有化学物質マスタ", adoCn, adOpenKeyset, adLockOptimistic 'レコードセットを開く ' プログレスバーの初期化 rowsDataNow = 0 Do While wb.Worksheets(sht).Cells(i, 1).value <> "" j = 13 kID = 1 Do While wb.Worksheets(sht).Cells(1, j).value <> "" .AddNew 登録処理 .Update ' 化学物質ID更新 kID = kID + 1 j = j + 1 Loop ' 品目ID更新 hID = hID + 1 i = i + 1 Loop ' レコードセットを閉じる .Close End With adoCn.Close 'コネクションのクローズ ' オブジェクトの破棄 Set adoRs = Nothing Set adoCn = Nothing ' エクセルの非表示を解除 ActiveWindow.Visible = True ' ファイルを保存せずに閉じる Workbooks(fileName).Close savechanges:=False ' 終了メッセージ MsgBox "マスター取込み処理が終了しました。" ' フォームを閉じる Unload UserForm1 End Sub Private Sub CommandButton2_Click() ' フォームを閉じる Unload UserForm1 End End Sub

補足情報(FW/ツールのバージョンなど)

Office2016
Excel
Access

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

閲覧及び回答ありがとうございます
検証したところ私が改修コードではなく
元からあったコードが根本原因のようです

' Accessファイルの最適化 accDb2 = accPath & "\" & "db.accdb" DBEngine.CompactDatabase accDb, accDb2 Kill accDb Name accDb2 As accDb

この箇所をコメントアウトしたらプロセスが残ってしまう現象は回避できました

投稿2019/02/25 08:01

hisa_1224

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

vba

1 ' access クエリ実行 2 ' access Table削除 3 .Open "d化学物質", adoCn 4 .Open "d含有化学物質", adoCn 5 .Open "d品目", adoCn 6 7 ' access Table再生成 8 .Open "c化学物質", adoCn 9 .Open "c含有化学物質", adoCn 10 .Open "c品目", adoCn

このクエリ実行のクエリは、
テーブル削除クエリ(DROP TABLE ...
テーブル作成クエリ(CREATE TABLE ...
ですか。
だとしたら,.Openではなく、adoCn.Execute になります。
レコードセットを返さないクエリは、Openできません。
Executeで実行します。

投稿2019/02/25 07:40

hatena19

総合スコア34064

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hisa_1224

2019/02/26 09:24

回答ありがとうございました。
guest

0

以下のそれぞれで、.Closeを行ってみて下さい。

VBA

1 ' access クエリ実行 2 ' access Table削除 3 .Open "d化学物質", adoCn 4 .Open "d含有化学物質", adoCn 5 .Open "d品目", adoCn 6 7 ' access Table再生成 8 .Open "c化学物質", adoCn 9 .Open "c含有化学物質", adoCn 10 .Open "c品目", adoCn

投稿2019/02/25 06:25

sazi

総合スコア25300

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hisa_1224

2019/02/26 09:24

回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問