tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB2005でワード差込印刷
記事No8794
投稿日: 2009/03/10(Tue) 17:52
投稿者ぷー
環境=VB2005、ワード2002

はじめまして、いつも拝見させていただいてます。
どーしてもできないので質問させて下さい。よろしくお願いいたします。

既存エクセルデータより既存ワードを呼び出して差込印刷をしたいと思っております。
なお、既存ワードには差し込み設定がしてあります。

エクセルデータをデータ.xls
ワードを文書.doc といたします。

エクセルデータの内容としては
項目名が 氏名・住所・一言 の3項目で
データとしては 1レコード目 あ/東京/日本1(氏名/住所/一言)
                2レコード目  い/大阪/日本2
                3レコード目  う/福岡/日本3  の3レコードです。


事象としてはデータが挿入されず、<<氏名>>のような項目名ででてきてしまっており、
しかも1枚しかでてこないという事象です。(3枚でてきてほしい)


以下にソースを記載いたします。
このサイトの宛名ラベル印刷をみてコードを作成してみました。


        Dim wdApp As Word.Application
        Dim wdDoc As Word.Document
        '   Dim wdDoc1 As Word.Document

        wdApp = CType(CreateObject("Word.Application"), Word.Application)

        Try

            '差し込み印刷設定してあるWordのファイルを開く場合
            wdDoc = wdApp.Documents.Open("\\A\e\フォルダ\文書.doc")

            ' wdDoc1 = CType(wdApp.Documents, Word.Document) '上のを変換

            ' wdDoc.MailMerge.MainDocumentType = wdFormLetters
            wdDoc.MailMerge.MainDocumentType = Word.WdMailMergeMainDocType.wdFormLetters

            '差込印刷のデータを設定(ExcelのSheet1 のテーブルに)
            wdDoc.MailMerge.OpenDataSource(Name:="\\A\e\フォルダ\データ.xls", LinkToSource:=True, SQLStatement:="SELECT * FROM `Sheet1$`")
            '差し込み印刷機能のオプションの設定
            With wdDoc.MailMerge
                .Destination = Word.WdMailMergeDestination.wdSendToNewDocument '差し込み文書の送り先を設定

                .SuppressBlankLines = False     'Trueの場合は空白行は印刷されない
                With .DataSource   '印刷するエクセルのシートのレコード範囲を設定
                    .FirstRecord = CLng(1)      '項目行を除いた最初の行
                    '.LastRecord = CLng(12)      'A4 1枚分だけ(12シート分)
                    .LastRecord = CLng(-16)     'Default 最後のデータまで
                End With
                .Execute(Pause:=True) '指定されたデータの差し込みを実行します。
            End With
            'wdDoc1 = wdApp.Documents 'wdApp.Documents(1)

            wdDoc.MailMerge.Execute(True)

            wdDoc.PrintOut(Background:=True)
            Do While wdApp.BackgroundPrintingStatus > 0

            Loop
        Catch
            MsgBox("エラー")
        Finally
            wdApp.Quit(SaveChanges:=Word.WdSaveOptions.wdDoNotSaveChanges)


            ' オブジェクトを解放します。
            '  wdDoc1 = Nothing
            wdDoc = Nothing
            wdApp = Nothing
        End Try

気になっているのがwdDoc1です。
wdDoc1 = wdApp.Documents(1)だとエラーになってしまい、
wdDoc1 = CType(wdApp.Documents, Word.Document)のように直したところエラーなので
wdDoc1に関しては全てコメントにしました。

何が悪いのかも良くわからない状況です。
至らない点は随時補足いたしますのでよろしくお願いいたします。









              

[ツリー表示へ]
タイトルRe: VB2005でワード差込印刷
記事No8808
投稿日: 2009/03/13(Fri) 16:35
投稿者花ちゃん
多分、ここのVB6.0用のコードを使用されたのだと思うのですが、一部、.NET用に
変更するだけで、使用できるはずですが?

>wdDoc1に関しては全てコメントにしました
コメントにすると差し込み前の原紙(ワードを文書.doc)が印刷されます。
差し込んだ後の wdDoc1 = wdApp.Documents.Item(1) を読み込みなおしてから
印刷しないと差し込み前の用紙が印刷されます。

エラーが発生したのならその原因を取り除かないとコードそのものを削除したら
当然そのコードの作業は行われません。

また、ワードを文書.doc は、手動では、Word 上で差し込み印刷が問題なくできて
いるのでしょうね(確認していますか)

.NET から Excel や Word を操作する場合は、VB6.0 の時のようにはできませんので
ここのExcelの操作のところに書いてあるような方法でアクセスしないとWordが解放
されなかったり、定数の設定等もうまく設定できずエラーとなったりします。

[ツリー表示へ]