前提・実現したいこと
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
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。