| 
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
日時: 2010/01/07 13:56
名前: 花ちゃん
 
************************************************************************************ カテゴリー:[ワード][][]                                                        *
 * キーワード:Word,ワード,差込印刷,エクセル,Excel,CSV,差し込み印刷                *
 ***********************************************************************************
 タイトル : VB2005でワード差込印刷
 記事No : 8794
 投稿日 : 2009/03/10(Tue) 17:52
 投稿者 : ぷー
 
 既存エクセルデータより既存ワードを呼び出して差込印刷をしたいと思っております。
 なお、既存ワードには差し込み設定がしてあります。
 
 事象としてはデータが挿入されず、<<氏名>>のような項目名ででてきてしまっており、
 しかも1枚しかでてこないという事象です。(3枚でてきてほしい)
 
 以下にソースを記載いたします。
 このサイトの宛名ラベル印刷をみてコードを作成してみました。
 
 -----------------------------------------------------------------------------------
 記事No : 8808
 投稿日 : 2009/03/13(Fri) 16:35
 回答者 : 花ちゃん
 -----------------------------------------------------------------------------------
 CSVファイルを直接読み込んでの宛名ラベルの印刷です。(Excel 未使用)
 別途、Word の差し込みウィザードで差し込み設定をしたファイルが必要です。
 
 ※ Word の差し込みウィザードの機能を使えない方は使用しないで下さい。
 
 プロジェクト→参照の追加→COM→Microsoft Word 12.0 Object Library を参照して下さい
 (Word 2007 以外の場合は、ご自分の環境に合せて適時設定を変更して下さい)
 
 Imports Microsoft.Office.Interop
 
 Public Class Form1
 
 Private Sub Button1_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles Button1.Click
 Dim wdApp As New Word.Application
 Dim wdDocs As Word.Documents = Nothing
 Dim wdDoc As Word.Document = Nothing
 Dim wdDoc1 As Word.Document = Nothing
 Dim DataPath As String = Application.StartupPath()
 Dim wdMailMerge As Word.MailMerge = Nothing
 Dim wdDs As Word.MailMergeDataSource = Nothing
 Dim csvFile As String = DataPath & "\Address.csv"  '差し込み用の住所が設定してあるCSVファイル
 wdDocs = wdApp.Documents
 Try
 'Wordの差し込みウィザードで設定した差し込み用のファイル
 wdDoc = wdDocs.Open(DataPath & "\Labelprint.docx")
 wdMailMerge = wdDoc.MailMerge
 With wdMailMerge     '文書の差し込み印刷機能を設定
 '差し込み印刷のデータ ソースを取得
 .OpenDataSource(Name:=csvFile, SQLStatement:="SELECT * FROM " & csvFile)
 '差し込み文書の送り先を設定(新規文書ファイルに)
 .Destination = Word.WdMailMergeDestination.wdSendToNewDocument
 .DataSource.FirstRecord = 1      '印刷するデータの範囲(最初のレコード)
 wdDs = .DataSource               '差し込み用のデータソースを取得
 wdDs.LastRecord = 12             '印刷するデータの範囲(最後のレコード) 但し、ページ単位となる
 'wdDs.LastRecord = -16           '全て印刷する場合は省略するか -16 で
 .Execute()                       '指定したデータの差し込みを実行
 End With
 wdDoc1 = wdApp.Documents.Item(1)    '住所を差し込んだ状態を取得
 '文書を印刷(印刷中のダイアログを表示しない No.422 のサンプルより)
 wdDoc1.PrintOut(Background:=True)
 Do While wdApp.BackgroundPrintingStatus > 0
 
 Loop
 '差し込んだファイルを名前を変えて保存
 wdDoc1.SaveAs(DataPath & "\LabelPrint01.docx")
 Catch ex As Exception
 MessageBox.Show(ex.Message)
 Finally
 MRComObject(wdDs)
 MRComObject(wdMailMerge)
 MRComObject(wdDoc1)
 MRComObject(wdDoc)
 MRComObject(wdDocs)
 '差込設定のファイルは保存しないで終了
 wdApp.Quit(SaveChanges:=Word.WdSaveOptions.wdDoNotSaveChanges)
 'オブジェクトを解放します。
 MRComObject(wdApp)
 End Try
 End Sub
 
 '下記は、 http://www.hanatyan.sakura.ne.jp/dotnet/Excel01.htm をご覧下さい。
 '(魔界の仮面弁士さんの投稿コードを使わせて頂きました)
 Public Shared Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False)
 If objCom Is Nothing Then
 Return
 End If
 Try
 If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then
 If force Then
 Dim count As Integer = System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom)
 Debug.WriteLine(count)
 Else
 Dim count As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
 Debug.WriteLine(count)
 End If
 End If
 Finally
 objCom = Nothing
 End Try
 End Sub
 End Class
 
 作成要領は、ここで、紹介しているVB6.0の方法と同じです。
 http://www.hanatyan.sakura.ne.jp/vbhlp/word02.htm
 http://www.hanatyan.sakura.ne.jp/vbhlp/Wordxplbl.htm
 
 差し込み設定用ファイル               差し込み結果
      |