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

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

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

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

Access

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

Q&A

解決済

2回答

5343閲覧

Access テンプレートを指定してエクスポート

saku99

総合スコア5

VBA

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

Access

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

0グッド

0クリップ

投稿2021/03/13 14:08

前提・実現いこと

AccessのVBAでテーブルをExcelにエクスポートするとき、用意されているテンプレート.xlsxのシートを指定してエクスポートしたい。

エクスポートテーブル:T_日報
エクスポートファイル名:日報_yyyymmdd.xlsx
テンプレートExcel:テンプレート.xlsx
※シート名左から:既存,解約,日報

①T_日報をテンプレート.xlsxのテンプレート.xlsxのシート:日報を使って、日報_yyyymmdd.xlsxとして保存したい。
②T_日報のフィールドNoは昇順でエクスポートするようにしたい

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

①過去の質問などを参考にして、シートを指定しなければエクスポートできるところまではできたのですが、シートの指定の仕方(日報シートを指定したい)が分かりません。 ②シートを指定しなければエクスポートできるが、Noの昇順にならない。※順番はバラバラでどのような基準でエクスポートされているのか不明だが、件数と内容は正しくエクスポートできている。

該当のソースコード

Dim strsql As String Dim strTemplate As String Dim strFileName As String Dim xlapp As Object Dim myCn As New ADODB.Connection Dim myRs As New ADODB.Recordset On Error GoTo Err_Exit csOutPutFileName = Application.CurrentProject.path csOutputTemplate = "テンプレート.xlsx" 'ファイル名作成 strFileName = csOutPutFileName & "\" & "Export\" & "日報_" & Format(Date, "yyyymmdd") & ".xlsx" 'EXCELアプリケーションを起動 Set xlapp = CreateObject("Excel.Application") 'セットする過程が見えないよう一旦不可視 'xlapp.Visible = False Set myCn = CurrentProject.Connection strsql = "SELECT * FROM T_日報" 'レコードセットオープン myRs.Open strsql, myCn, adOpenForwardOnly, adLockReadOnly With xlapp 'テンプレートを開く strTemplate = Application.CurrentProject.path & "\" & "雛形\" & csOutputTemplate 'テンプレートファイルが存在しないときはエラー If Dir(strTemplate) = "" Then MsgBox "テンプレートファイルを確認してください。", vbOKOnly + vbCritical, "エラー" .Visible = True .Quit Exit Sub End If 'テンプレートファイルオープン .Workbooks.Open strTemplate '結果値出力処理(1行目にヘッダーを表示しているので、2行目1列目からセット .Cells(2, 1).CopyFromRecordset myRs '完了したら保存 .ActiveWorkBook.SaveAs FileName:=strFileName MsgBox "出力しました。", vbOKOnly + vbInformation End With Set myRs = Nothing: Close Set myCn = Nothing: Close 'Excelを終了します xlapp.Quit Exit Sub Err_Exit: MsgBox Err.Number & ":" & Err.Description, vbOKOnly + vbCritical, "OutputExcel()" Set myRs = Nothing: Close Set myCn = Nothing: Close xlapp.Quit End Sub ### 試したこと csOutputTemplate = "テンプレート.xlsx," True,"日報" としてみたのですが赤字でエラー あとは検討もつかずです。どうかご教示いただけないでしょうか。 宜しくお願い致します。 ### 補足情報(FW/ツールのバージョンなど) Access2010 ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

②T_日報のフィールドNoは昇順でエクスポートするようにしたい

strsql = "SELECT * FROM T_日報
を下記に修正。
strsql = "SELECT * FROM T_日報 ORDER BY [No]"

Noは予約語なのでそのまま使うとエラーになるので、[ ]で囲む必要があります。

シートの指定の仕方(日報シートを指定したい)が分かりません。

.Workbooks.Openメソッドの返り値で開いたブックが返るのでそれを利用して、WorkSheetsプロパティで参照できます。

vba

1'前略 2 3 'テンプレートファイルオープン 4 Dim wb As WorkBook 5 Set wb = .Workbooks.Open(strTemplate) 6 7 '結果値出力処理(1行目にヘッダーを表示しているので、2行目1列目からセット 8 wb.WorkSheets("日報").Cells(2, 1).CopyFromRecordset myRs 9 10'後略

投稿2021/03/14 00:55

編集2021/03/16 01:46
hatena19

総合スコア33782

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

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

saku99

2021/03/15 08:10

ありがとうございます。Dim wb As WorkBookはエラーとなってしまいました。shinya0320さんのSet excelWorkBook = .Workbooks.Open(strTemplate)とSet excelWorkSheet = excelWorkBook.WorkSheets("日報")で対応できました。 ですが、strsql = "SELECT * FROM T_日報 ORDER BY [No]"はご教示いただいた内容でばっちり動きました。大変助かりました。ありがとうございました。
hatena19

2021/03/16 01:45

Set wb = .Workbooks.Open strTemplate を下記に修正してください。 Set wb = .Workbooks.Open(strTemplate) 回答も修正しておきました。
guest

0

ベストアンサー

AccessVBAでExcelテンプレートへのエクスポートをやったことがないので
適当なことを言うかもですが

strsql = "SELECT * FROM T_日報"

これにOrder Byを指定すればどうでしょう?

投稿2021/03/13 14:15

sinya0320

総合スコア211

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

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

saku99

2021/03/13 14:34

ありがとうございます。 適当どころか大変参考になります。 昇順についてはORDER BY T_日報.No ASC”で対応してみます。 シートを指定してエクスポートについてはご教示いただけますでしょうか。 宜しくお願い致します。
sinya0320

2021/03/13 15:21 編集

> 'テンプレートファイルオープン > .Workbooks.Open strTemplate WorkBook型、WorkSheet型の変数を定義して Set excelWorkBook = .Workbooks.Open(strTemplate) と、開いたWorkbookを参照できるようにします。 Set excelWorkSheet = excelWorkBook.WorkSheets(1) と指定すれば、開いたブックのシートを参照することができます。 シートのインデックスは1から始まる連番です。 # シート名でもアクセスできたような気がしますが、確認してません。 ↓のように指定すればできると思います。 excelWorkSheet.Cells(2, 1).CopyFromRecordset myRs
saku99

2021/03/15 08:11

ご教示いただいた内容で解決できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問