tagCANDY CGI VBレスキュー(花ちゃん) - Wordの差し込み印刷機能を使って宛て名ラベルを印刷(VB.NET) - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
Wordの差し込み印刷機能を使って宛て名ラベルを印刷(VB.NET)
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

Wordの差し込み印刷機能を使って宛て名ラベルを印刷(VB.NET) [No.223の個別表示]
     サンプル投稿用掲示板  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

差し込み設定用ファイル               差し込み結果
メンテ

Page: 1 |

 投稿フォーム               スレッド一覧へ
題  名 スレッドをトップへソート
名  前
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存   
スレッド一覧へ