#689 | AccessからExcelのテンプレートシートを利用するプログラム例 | VBA | ||||||||||||||||||||||||||||||||||
個別のデータのまったく入力されていない、それ以外の枠組みだけのExcelのワークシートをあらかじめテンプレートとして作成しておき、それにAccessからデータ部分だけを流し込み、特定のファイル名で保存するという処理の例を紹介します。 まず、ここでは例として次のようなワークシートをテンプレートとして作っておきます。
次に、Access側の処理として、Excel側で必要となるデータがすべて揃ったテーブルやクエリを用意しておきます。 ここでは次のようなクエリを作り、ある1つの受注IDだけを抽出条件に指定し、かつテーブルを結合することでそれに関連した顧客や商品明細などのデータが得られるようにしました。なお、その都度異なる特定の受注IDだけ取り出す処理についてはいろいろな方法がありますが、ここでは割愛し、クエリに固定で組み込まれているものとします。 このとき、Accessのクエリのフィールド名とExcelのワークシートのセル位置との関係は次のようになります。
そして、一連の処理を行うプログラムの流れとしては次のようなものとなります。
Public Sub ExcelTemplateSample() Dim dbs As Database Dim rst As Recordset Dim xls As Object Dim intRow As Integer Dim lngOrderID As Long Dim strSaveBookPath As String 'テンプレートの保存先フォルダ Const cstrTemplateDir As String = "C:\テスト\" 'テンプレートのファイル名 Const cstrTemplateBook As String = "受注伝票テンプレート.xlsx" 'データが代入されたファイルの保存先フォルダ Const cstrSaveBookDir As String = "C:\テスト\" 'データ元のクエリを開く Set dbs = CurrentDb Set rst = dbs.OpenRecordset("qsel受注伝票") 'Excelオブジェクトを生成 Set xls = CreateObject("Excel.Application") With xls '画面の再描画を抑止 .ScreenUpdating = False 'テンプレートファイルを開く .Workbooks.Open cstrTemplateDir & cstrTemplateBook 'ワークシートをコピー .Workbooks(cstrTemplateBook).Worksheets("Sheet1").Copy 'テンプレートファイルを閉じる .Workbooks(cstrTemplateBook).Close '1レコード目から受注IDと得意先情報を代入 lngOrderID = rst!受注ID .Cells(4, 2).Value = lngOrderID .Cells(5, 2).Value = rst!得意先ID .Cells(6, 2).Value = "〒" & rst!郵便番号 & " " & rst!住所 .Cells(7, 2).Value = rst!会社名 .Cells(4, 7).Value = Date '商品明細の全レコードをループで各セルに代入 intRow = 10 Do Until rst.EOF .Cells(intRow, 1).Value = rst!商品コード .Cells(intRow, 2).Value = rst!商品名 .Cells(intRow, 5).Value = rst!数量 .Cells(intRow, 6).Value = rst!販売単価 .Cells(intRow, 7).Value = rst!金額 intRow = intRow + 1 rst.MoveNext Loop rst.Close '保存するファイル名のフルパスを組み立て strSaveBookPath = cstrSaveBookDir & "受注伝票_" & Format$(lngOrderID, "00000") & ".xlsx" '同名ファイルを強制削除 On Error Resume Next Kill strSaveBookPath On Error GoTo 0 'データを代入したブックを保存 .ActiveWorkBook.SaveAs strSaveBookPath '画面の再描画を元に戻す .ScreenUpdating = True 'Excelを終了 .Quit End With Set xls = Nothing End Sub 補足
実行例: |
||||||||||||||||||||||||||||||||||||
|
Copyright © T'sWare All rights reserved |