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 ファイルは、保存せずに開いたままです。
≪準備≫

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

テーブル

tbl_参加住所」 という名前の
テーブルデータを出力します。

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


準備ができたところで、
以下のコードを標準モジュールに貼り付けます。
この頁のTOPへTop
Sub wordADOTable()
'ADO を使用してAccess のデータを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 myCell As Variant

    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim stSQL As String                 'SQL 文字列
    Dim myTitle As String               '項目名用 (タブ区切り)
    
    Dim tmp As Variant                  'データ格納用
    
    stSQL = "SELECT * FROM tbl_参加住所"	'★
    '★項目名タイトル用
    myTitle = "ID" & vbTab & "県No" & vbTab & "県名" & vbTab & "住所" & vbTab & "参加人数"
    
    Set cnn = CurrentProject.Connection
    Set rst = cnn.Execute(stSQL)
    If rst.EOF Then GoTo exit_SUB
    '文字列データ格納 (全データをタブ区切りで取得)
    tmp = rst.GetString(adClipString, , , vbNewLine)
    
    '新規 word 文書作成
    Set objWd = CreateObject("Word.Application")
    Set doc = objWd.Documents.Add
    Set myRange = doc.Content
   
    'Word 画面を表示
    objWd.Visible = True
    
    '文書タイトル入力
    With myRange
        .InsertParagraph
        .InsertBefore "参加住所一覧"    '★
        .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
    End With
    
    With myRange
        '範囲の拡張(貼り付けたデータの最後まで)
        .SetRange _
            Start:=doc.Paragraphs(3).Range.Start, _
            End:=doc.Content.End
        '書式設定(表に変換)
        .ConvertToTable Format:=wdTableFormatProfessional, _
            ApplyHeadingRows:=True, AutoFit:=True
    End With
    
    '表の微調整
    Set myTable = doc.Tables(1)
    With myTable
        '表全体をセンタリング
        .Rows.Alignment = wdAlignRowCenter
        'タイトル行表示設定
        .Rows(1).HeadingFormat = True
        '1列目をセンタリング
        For Each myCell In myTable.Columns(1).Cells
            myCell.Range.ParagraphFormat.Alignment _
                = wdAlignParagraphCenter
        Next myCell
        '5列目は右寄せ
        For Each myCell In myTable.Columns(5).Cells
            myCell.Range.ParagraphFormat.Alignment _
                = wdAlignParagraphRight
        Next myCell
    End With
    
    '終了(保存しない)
    MsgBox "処理終了〜!", vbOKOnly
    Set myTable = Nothing: Set myRange = Nothing
    Set objWd = Nothing: Set doc = Nothing
    
exit_SUB:
    Set rst = Nothing: Set cnn = Nothing
End Sub
この頁のTOPへTop
≪使い方≫

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

  例: Call wordADOTable

実行結果

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

※ データ量が多い場合は、処理終了まで少々時間が掛かります。
≪注意≫
  • 上記のコードにはエラー処理がありません。 適切なエラー処理を追加してください。

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

  • 作成した文書ファイルには、保存処理はしていません。 ファイルが開いたまま、コードが終了します。

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

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


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

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

Copyright(C) pPoy 2010