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

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

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

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

Access

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

解決済

Excel VBAよりAccessのエクスポート機能(DoCmd.TransferSpreadsheet)を使用したい

salty_
salty_

総合スコア0

VBA

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

Access

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

2回答

0評価

0クリップ

2640閲覧

投稿2020/08/27 02:35

前提・実現したいこと

現在Excel VBA⇔Accessを連携させているマクロブック(xlsm)があります。
その中で、ある処理の前に前回処理実行日から10日以上たっている場合
Accessのテーブルのバックアップを取りたく
(Access内ではなく、任意のフォルダにxlsx形式かcsv形式で保存したい)
色々考えた結果Accessのエクスポート機能を利用しようと思ったのですが
DoCmd.TransferSpreadsheetの処理がうまくいきません。

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

実行時エラー2046 コマンドまたはアクション'スプレッドシート変換'は無効です。

該当のソースコード

ExcelVBA

'DB接続(ここは問題なくずっと使えてます) Sub ConnectDB() Dim ConnectionString As String Dim odbdDB As String Dim read_folder As String odbdDB = ThisWorkbook.Sheets("Top").Range("M2") If odbdDB = "" Then MsgBox "データベースの格納先が入力されていません。" & vbCrLf & "〔DB格納先〕に正しく入力してください。処理を終了します。", vbOKOnly + vbCritical Exit Sub End If Set adoCn = CreateObject("ADODB.Connection") 'ADODBコネクションオブジェクトを作成 adoCn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & odbdDB & ";" & "JET OLEDB:Database" 'DBへの接続 adoCn.Open End Sub

この処理の後に

ExcelVBA

Sub test() Dim strSQL As String Dim last_run As String Dim objACCESS As Object 'Accessのアプリケーションオブジェクトを作成する Set objACCESS = CreateObject("Access.Application") adoCn.BeginTrans 'トランザクション開始 Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成 strSQL = "SELECT Max(前回実行日.登録日) FROM [前回実行日テーブル];" adoRs.Open strSQL, adoCn last_run = adoRs.Fields(0) '前回実行日の取得 If DateDiff("d", last_run, Now) > 10 Then '前回の実行日が10日以上前なら ** objACCESS.DoCmd.TransferSpreadsheet acExport, , "BKUP取りたいテーブル名", _ "保存先パス+ファイル名" & last_run & ".xlsx" ←ここでエラーが発生します** End If ~~~(このあとは別の今まで動いている処理があります)~~~ 'トランザクション終了 adoCn.CommitTrans End sub

お聞きしたいこと

①そもそもなんですが、ExcelVBAからAccessのエクスポート機能の利用は出来るのでしょうか?
②Access上でエクスポートのマクロを作成し、
ExcelVBAからAccessマクロを呼び出すという使い方が正解なんでしょうか?

ExcelとAccessの連携についてあまりよく分かっておらず、今までも見よう見まねで作ってきたので
お恥ずかしいのですがご教示いただけるとありがたいです。
よろしくお願いします。

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

Excel2016,Access2016です。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

azzuro
azzuro

2020/08/27 03:08

ヒントだけ。 Excel とAccessの連携で以前よく使ったのはCopyFromRecordsetです。 Excel側からテーブルをレコードセットで開いて、シート上に一括で貼りつけることができます。 CopyFromRecordsetをキーワードにしてググってみてください。
salty_
salty_

2020/08/27 03:13

azzuro様 ご回答ありがとうございます!!調べてみます!!m\( _ _\)m
tosi
tosi

2020/08/27 05:36

過去にこの様な質問ありました。ご参考まで。 https://teratail\.com/questions/279333
salty_
salty_

2020/08/27 07:19

tosi様 ご回答ありがとうございます!まだうまくいっておらず・・・こちらの方法も参考にしてみます!

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

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

Access

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