サンプル投稿用掲示板 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
差し込み設定用ファイル 差し込み結果
-
|