実現したいこと
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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
0 コメント