Access Tips by pPoy

  
トップへ←Top    QueryへQuery  FormへForm  ReportへReport  Module(Sub)へSub  Module(Function)へFunction  Excel連携へExcel  Etc.へEtc.  Word連携へWord

Word Access から ADO を使用してクエリの結果をグループ別にWordファイルに出力する 
(Access2002,Access2003, Word2002,Word2003)
Access のクエリの結果を、グループ別に Word文書として出力する方法です。

以下のコードは、ADO を使用して Word の表としてクエリデータを出力します。
出力後、文書のタイトルを入力し、表のオートフォーマットを適用します。
作成した Word ファイルは、指定されたフォルダに保存されます。

クエリのグループの数だけファイルが作成されます。ファイル名として、グループ名をそのまま使用します。
GetString で、クエリの結果を取得していますが、こちら とは異なり、「カンマ区切り」 を使用しています。
当然 貼付先での Word VBA の ConvertToTable も、カンマ区切りを使用しています。
≪準備≫

Microsoft Word 11.0 Object Library (Word 2003) に参照設定が必要です。
必ずお使いのバージョンを設定してください。

テーブル

tbl_参加住所」 という名前の
テーブルがあります。

←左のような、
テーブルを用意してください。


このデータを 「県名」 毎に Word 文書に出力します。

準備ができたところで、
以下のコードを標準モジュールに貼り付けます。
※ 結構長いです。
この頁のTOPへTop
Sub wordSavedQuery()
'ADO を使用してクエリの結果をグループ別にWordファイルに出力する
'Microsoft Word 11.0 Object Library (Word 2003)への
'参照設定が必要 2010/08/01 pPoy
    Dim objWd As Word.Application
    Dim doc As Word.Document
    Dim myRange As Word.Range
    Dim myTable As Word.Table
    Dim docPath As Variant              'Wordファイルを保存する場所

    Dim cnn As ADODB.Connection
    Dim rstG As ADODB.Recordset         'グループ名一覧
    Dim rstD As ADODB.Recordset         'グループ別データ
    Dim stSQL As String                 'SQL 文字列
    Dim stTbl As String                 'テーブル名
    Dim stGName As String               'グループ名用項目名
    Dim myTitle As String               '項目名用 (カンマ区切り)
    
    Dim tmp As Variant                  'データ格納用
    Dim tmpName As String               'グループ名仮置き
    
    stTbl = "tbl_参加住所"              '★対象テーブル
    stGName = "県名"                    '★グループ名用項目名
    docPath = "C:\Test\Test1\"          '★最後に"\"をつける
    
    '★項目名タイトル用(カンマ区切り)
    myTitle = "県No,県名,住所,参加人数"
    
    'グループ名一覧取得
    Set cnn = CurrentProject.Connection
    stSQL = "SELECT DISTINCT " & stGName & " FROM " & stTbl
    Set rstG = cnn.Execute(stSQL)
    If rstG.EOF Then GoTo exit_SUB
    
    'Word Object格納
    Set objWd = CreateObject("Word.Application")
    
    'グループ名ループ
    While Not rstG.EOF
        tmpName = rstG(stGName).Value
        'グループ別データ取得
        stSQL = "SELECT " & myTitle & " FROM " & stTbl
        stSQL = stSQL & " WHERE " & stGName & "='" & tmpName & "'"
        Set rstD = cnn.Execute(stSQL)
        '文字列データ格納 (カンマ区切り)
        tmp = rstD.GetString(adClipString, , ",", vbNewLine)
        GoSub docAdd                'Word処理
        rstG.MoveNext
    Wend
    
    '終了
    objWd.Quit: Set rstD = Nothing
    Set myTable = Nothing: Set myRange = Nothing
    Set objWd = Nothing: Set doc = Nothing
    MsgBox "処理終了〜!", vbOKOnly
    
exit_SUB:
    Set rstG = Nothing: Set cnn = Nothing
    Exit Sub
    
docAdd:
    '新規 word 文書作成
    Set doc = objWd.Documents.Add
    Set myRange = doc.Content
   
    '★Word 画面を表示
    objWd.Visible = True
    
    '文書タイトル入力
    With myRange
        .InsertParagraph
        .InsertBefore "参加住所一覧 (" & tmpName & ")"  '★
        .Bold = True
        .Font.Size = 18
        .Paragraphs.Add
        .Paragraphs.Alignment = wdAlignParagraphCenter
        '範囲の最後に移動
        .Collapse Direction:=wdCollapseEnd
    End With
        
    'データ貼付
    myRange = tmp
    Set myRange = doc.Paragraphs(3).Range
    'データの項目行挿入
    With myRange
        .InsertParagraphBefore
        .InsertBefore myTitle
        '範囲の拡張
        .SetRange _
            Start:=doc.Paragraphs(3).Range.Start, _
            End:=doc.Content.End
        '表に変換
        .ConvertToTable _
            Separator:=wdSeparateByCommas, _
            Format:=wdTableFormatProfessional, _
            ApplyHeadingRows:=True, AutoFit:=True
    End With
    
    '表の微調整
    Set myTable = doc.Tables(1)
    With myTable
        '表全体をセンタリング
        .Rows.Alignment = wdAlignRowCenter
        'タイトル行表示設定
        .Rows(1).HeadingFormat = True
    End With
    '保存
    doc.SaveAs FileName:=docPath & tmpName & ".doc"
    doc.Close
    Return

End Sub
この頁のTOPへTop
≪使い方≫

フォームのどこかにコマンドボタンを作成し、そのクリック時イベントから呼び出してください。

  例: Call wordSavedQuery
≪実行結果≫

保存結果

←このような感じで、
新しい Word文書が作成されます。

ファイル名=グループ名です。

※ データ量が多い場合は、処理終了まで少々時間が掛かります。

出力例

←出力されたファイルの1例です。
≪注意≫
  • 上記のコードにはエラー処理がありません。 適切なエラー処理を追加してください。

  • 既存の同名のファイルが存在した場合、無条件に上書きしますので、注意してください。

  • 表の項目行用に、テーブルの項目名をカンマ区切りの文字列として、「myTitle」 変数に登録しています。
    表の内容が異なっている場合は、内容に合わせてこの部分も変更してください。

  • 文書ファイル作成時に、Word 画面を表示していますが、鬱陶しい場合はこの部分をコメントアウトしてください。

  • Word文書作成処理を 「サブルーチン」 にしてありますが、外部関数として呼び出した方がスマートで、且つ応用が効くと思います。

  • この文書には、表のオートフォーマットの 「表 (プロフェッショナル)」 書式を適用しています。
    詳しくは、こちら を参照してください。 「ワードの 『表のオートフォーマット』 書式一覧」です。

  • Word VBA を使用して文書を表に変換する処理は、Help の 「ConvertToTable」 を参照してください。
    引数の説明が細かく載っています。

  • Access から ADO を使用してクエリの結果をグループ別に改頁して、Word文書に出力する方法は、こちら です。
    こちらの処理では、作成される Word ファイルは1件のみです。


この頁のTOPへTop
【念の為の注意書きです。】
このページ(下位ページ含む)の全ての物の無断転載を禁止いたします。
又、当ページ(下位ページ含む)に記載されていることは、全て自己の責任において実行してください。

☆ 感想をお知らせください (直接ブラウザから送信致します。メールアカウントは不要です。)
  form mail はこちら

Copyright(C) pPoy 2010