| Access Tips by pPoy |
| 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 文書に出力します。 準備ができたところで、 以下のコードを標準モジュールに貼り付けます。 ※ 結構長いです。 | |||
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
|
|
≪使い方≫ フォームのどこかにコマンドボタンを作成し、そのクリック時イベントから呼び出してください。 例: Call wordSavedQuery
|
≪実行結果≫
←このような感じで、 新しい Word文書が作成されます。 ファイル名=グループ名です。 ※ データ量が多い場合は、処理終了まで少々時間が掛かります。 ![]() ←出力されたファイルの1例です。 |
≪注意≫
|
☆ 感想をお知らせください (直接ブラウザから送信致します。メールアカウントは不要です。)
form mail はこちら
Copyright(C) pPoy 2010