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

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

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

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

Access

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

Q&A

解決済

1回答

553閲覧

ACCESSでExcelファイルを新規作成した後にクエリ内容をエクスポートするには

AKI_TADA

総合スコア9

VBA

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

Access

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

0グッド

0クリップ

投稿2023/12/11 07:53

実現したいこと

ACCESSVBAで、EXCELファイルを新規作成した後にその新規作成したEXCELファイルのワークシートにクエリの内容をエクスポートできるようにしたい。

前提

今現在、ACCESSVBAでExcelファイルを新規作成した後に、クロス集計クエリの内容をExcelにエクスポートするプログラムをコーディングしています。
しかし、Excelファイルを新規作成した後に名前を付けて保存したファイルを指定しようとすると、オブジェクトが見つかりません。というエラーが出ました。原因を調べたところ、ファイル名を付ける変数FILEPATHが文字列型だったことが原因であることが分かりました。
そこで新たにオブジェクト変数VPATHを定義して、ファイル名をそれに代入してオブジェクト変換できるか試してみたのですが、今度は「オブジェクト変数またはwithブロック変数が設定されていません。」というエラーが出ます。
ファイル名を付けた変数の値でオブジェクトとして呼び出すにはどういったコードにすればいいのでしょうか。
分かりづらい質問ですがよろしくお願いします。

エラーメッセージ 実行時エラー'91' オブジェクト変数またはWith ブロック変数が設定されていません。

該当のソースコード

Dim XLAPP As Object 'Excelオブジェクト向け変数 Dim WB As Object 'Excelワークブック向け変数 Dim WS As Object 'Excelワークシート向け変数 Dim FILEPATH As String 'Excel保存先パス向け変数 Dim VPATH As Object 'クエリのExcelへのエクスポート先向け変数 'Excelを起動する Set XLAPP = CreateObject("Excel.Application") '開いたExcelでワークブックを追加する。 Set WB = XLAPP.Workbooks.Add '一つ目のワークシートを参照する。 Set WS = WB.WORKSHEETS(1) 'ワークシートの名前を変更する。 WS.Name = "商品名と明細金額" 'Excelファイルの保存先を決める。 'ファイルを今日の日付の「YYMMDD」形式とする。 FILEPATH = CurrentProject.Path & "\" & Format(Date, "YYMMDD") & ".xlsx" 'ワークブックを保存する。 WB.SAVEAS FILEPATH 'オブジェクトVPATHにワークブック名FILEPATHを代入する。 VPATH = FILEPATH 'ワークブックにクエリ「商品名と明細金額」 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "商品名と明細金額", FILEPATH, True 'ワークブックを閉じる。 WB.Close '変数を解放する。 Set XLAPP = Nothing Set WB = Nothing Set WS = Nothing '作成したExcelファイルを開くか確認する。 If MsgBox("作成したExcelファイルを開きますか?", vbYesNo) = vbYes Then Shell "Excel.exe " & FILEPATH, vbNormalFocus End If End Sub

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

hatena19

2023/12/11 08:12

「ファイル名を付ける変数FILEPATHが文字列型」というのは問題ないです。原因は別です。 ファイル名は文字列でオブジェクトでないので、 「そこで新たにオブジェクト変数VPATHを定義して、ファイル名をそれに代入してオブジェクト変換できるか試してみた」 ということはできませんし、無意味です。 この追加したコードは削除してください。 そのうえでそのコードを実行して「オブジェクトが見つかりません。」というエラーがどの行ででるか質問に追記してください。
AKI_TADA

2023/12/11 08:19

コメントありがとうございます。 追加したコードを削除してもう一度実行してみたところ、「ワークブックにクエリ『商品名と明細金額』をエクスポートする。」の行で「オブジェクトが見つかりません。」というエラーが出ました。
AKI_TADA

2023/12/11 08:20

その行のコードも貼っておきます。 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "商品名と明細金額", FILEPATH, True
guest

回答1

0

ベストアンサー

ワークブックを開いたまま、そこにエクスポートしようとしているのが原因のようです。
閉じてからエクスポートすればエラーはでないでしょう。

vba

1'ワークブックを保存する。 2WB.SAVEAS FILEPATH 3 4'オブジェクトVPATHにワークブック名FILEPATHを代入する。 5VPATH = FILEPATH 6 7'ワークブックを閉じる。 8WB.Close 9 10'ワークブックにクエリ「商品名と明細金額」 11DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "商品名と明細金額", FILEPATH, True

ただし、空の「商品名と明細金額」シートの後に「商品名と明細金額1」というシートに出力されます。

新規のワークブックにエクスポートするなら、わざわざワークブックを作成しなくても、エクスポート(TransferSpreadsheet)だけで新規のワークブックにエクスポートできます。

vba

1 Dim FILEPATH As String 'Excel保存先パス向け変数 2 'Excelファイルの保存先を決める。 3 'ファイルを今日の日付の「YYMMDD」形式とする。 4 FILEPATH = "C:\TEST\" & Format(Date, "YYMMDD") & ".xlsx" 5 6 '新規ワークブックにクエリ「商品名と明細金額」をエクスポート 7 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "テーブル1", FILEPATH, True 8 9 '作成したExcelファイルを開くか確認する。 10 If MsgBox("作成したExcelファイルを開きますか?", vbYesNo) = vbYes Then 11 Shell "Excel.exe " & FILEPATH, vbNormalFocus 12 End If

投稿2023/12/11 09:21

hatena19

総合スコア34364

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問