前提・実現したいこと
現在Excel VBA⇔Accessを連携させているマクロブック(xlsm)があります。
その中で、ある処理の前に前回処理実行日から10日以上たっている場合
Accessのテーブルのバックアップを取りたく
(Access内ではなく、任意のフォルダにxlsx形式かcsv形式で保存したい)
色々考えた結果Accessのエクスポート機能を利用しようと思ったのですが
DoCmd.TransferSpreadsheetの処理がうまくいきません。
発生している問題・エラーメッセージ
実行時エラー2046 コマンドまたはアクション'スプレッドシート変換'は無効です。
該当のソースコード
ExcelVBA
1'DB接続(ここは問題なくずっと使えてます) 2Sub ConnectDB() 3 Dim ConnectionString As String 4 Dim odbdDB As String 5 Dim read_folder As String 6 7 odbdDB = ThisWorkbook.Sheets("Top").Range("M2") 8 9 If odbdDB = "" Then 10 MsgBox "データベースの格納先が入力されていません。" & vbCrLf & "〔DB格納先〕に正しく入力してください。処理を終了します。", vbOKOnly + vbCritical 11 Exit Sub 12 End If 13 14 Set adoCn = CreateObject("ADODB.Connection") 'ADODBコネクションオブジェクトを作成 15 adoCn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & odbdDB & ";" & "JET OLEDB:Database" 'DBへの接続 16 adoCn.Open 17End Sub
この処理の後に
ExcelVBA
1Sub test() 2 3Dim strSQL As String 4Dim last_run As String 5Dim objACCESS As Object 6 7 'Accessのアプリケーションオブジェクトを作成する 8 Set objACCESS = CreateObject("Access.Application") 9 10 adoCn.BeginTrans 'トランザクション開始 11 Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成 12 strSQL = "SELECT Max(前回実行日.登録日) FROM [前回実行日テーブル];" 13 adoRs.Open strSQL, adoCn 14 last_run = adoRs.Fields(0) '前回実行日の取得 15 If DateDiff("d", last_run, Now) > 10 Then '前回の実行日が10日以上前なら 16** objACCESS.DoCmd.TransferSpreadsheet acExport, , "BKUP取りたいテーブル名", _ 17 "保存先パス+ファイル名" & last_run & ".xlsx" ←ここでエラーが発生します** 18 End If 19 20~~~(このあとは別の今まで動いている処理があります)~~~ 21 'トランザクション終了 22 adoCn.CommitTrans 23End sub
お聞きしたいこと
①そもそもなんですが、ExcelVBAからAccessのエクスポート機能の利用は出来るのでしょうか?
②Access上でエクスポートのマクロを作成し、
ExcelVBAからAccessマクロを呼び出すという使い方が正解なんでしょうか?
ExcelとAccessの連携についてあまりよく分かっておらず、今までも見よう見まねで作ってきたので
お恥ずかしいのですがご教示いただけるとありがたいです。
よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
Excel2016,Access2016です。
回答2件
あなたの回答
tips
プレビュー