Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Vbから Word差込印刷について

381 views
Skip to first unread message

sato

unread,
Jul 9, 2007, 4:06:04 AM7/9/07
to

お世話になります。
環境はWindowXP(SP2) , VB6.0(SP6), Word2002です。

次のプログラムにより、
Accessファイルの住所録をWordの差込印刷を行いましたが、一枚だけ印刷しました。
Accessファイルの住所録のレコードを全部印刷する方法をご指導していただけませんか?

また、VbからWordの差し込み印刷の印字位置を調整できますか?
できる場合、方法をお願いします。

==================================
Private Sub 差込印刷()
Dim Wordapp As Word.Application
Dim WordDoc As Word.Document
Dim WordDoc1 As Word.Document
Dim WordFile As String
Dim AddressFile As String Accessの住所録ファイル名

Set Wordapp = CreateObject("Word.Application")

'差し込み印刷設定してあるWordのファイルを開く
WordFile = "C:\文面.doc"
Set WordDoc = Wordapp.Documents.Open(WordFile)
Set WordDoc1 = Wordapp.Documents(1)

'住所録ファイルの差し替え
AddressFile = "C:\Test.mdb"
WordDoc.MailMerge.OpenDataSource Name:=AddressFile, _
LinkToSource:=True, Connection:="Test"

'差し込み印刷機能のオプションの設定
WordDoc.MailMerge.Destination = wdSendToNewDocument
WordDoc.MailMerge.SuppressBlankLines = False
WordDoc.MailMerge.Execute pause:=True

Set WordDoc1 = Wordapp.Documents("定型書簡1")
Wordapp.Quit SaveChanges:=wdDoNotSaveChanges

Set WordDoc1 = Nothing
Set WordDoc = Nothing
Set Wordapp = Nothing

End Sub

K.J.K.

unread,
Jul 9, 2007, 5:51:13 AM7/9/07
to
K.J.K.です。

# 名前をむやみに変えないでください。

sato wrote:
> Accessファイルの住所録のレコードを全部印刷する方法をご指導していただけま
> せんか?

Document.MailMerge.DataSource.FirstRecord = wdDefaultFirstRecord
Document.MailMerge.DataSource.LastRecord = wdDefaultLastRecord
を適切な場所に追加してください。

> また、VbからWordの差し込み印刷の印字位置を調整できますか?

「印字位置の調整」がどのようなものなのかがわかりませんが、直接の操作
では実現できるのであれば、マクロとして記録して解析するとか。

ただし、封筒の印刷などのために印字調整が必要であるのならば、それ専用の
用紙サイズを作って使うべきかと。

もっと言うと、封筒や葉書の印刷にはWordよりPublisherのが適しています。

sato

unread,
Jul 9, 2007, 9:18:19 PM7/9/07
to
お世話になりまして、本当にありがとうございました。

> # 名前をむやみに変えないでください。

迷惑をかけました。大変すみませんでした。

> Document.MailMerge.DataSource.FirstRecord = wdDefaultFirstRecord
> Document.MailMerge.DataSource.LastRecord = wdDefaultLastRecord
> を適切な場所に追加してください。

おかげさまで、ご指導の通りに追加して、全部印刷しました。

>> また、VbからWordの差し込み印刷の印字位置を調整できますか?
>
> 「印字位置の調整」がどのようなものなのかがわかりませんが、直接の操作
> では実現できるのであれば、マクロとして記録して解析するとか。
>
> ただし、封筒の印刷などのために印字調整が必要であるのならば、それ専用の
> 用紙サイズを作って使うべきかと。
>
> もっと言うと、封筒や葉書の印刷にはWordよりPublisherのが適しています。

説明不足で、すみませんでした。
印刷物は窓つき封筒に入れるもの(A4用紙)です。 
VBのコマンドーにより、窓部分の印字位置を指定したいです。
よろしくお願いします。

K.J.K.

unread,
Jul 9, 2007, 10:59:53 PM7/9/07
to
K.J.K.です。

sato wrote:
>> 「印字位置の調整」がどのようなものなのかがわかりませんが、直接の操作
>> では実現できるのであれば、マクロとして記録して解析するとか。

> 印刷物は窓つき封筒に入れるもの(A4用紙)です。 
> VBのコマンドーにより、窓部分の印字位置を指定したいです。

繰り返しますが、その部分を自分でまず直接操作しマクロとして記録し、
それを解析してみてください。というのも、文書の構成に著しく依存する
操作ですので、メソッドやプロパティの呼び出し一発で解決するような
ものではないからです。
# もちろん、文書の作り方(その部分を独立して移動できるように作る、など)
# によってはほぼ一発にはなりますが。

sato

unread,
Jul 10, 2007, 1:51:11 AM7/10/07
to
お世話になりまして、誠ににありがとうございました。

"K.J.K." wrote:
> 繰り返しますが、その部分を自分でまず直接操作しマクロとして記録し、
> それを解析してみてください。というのも、文書の構成に著しく依存する
> 操作ですので、メソッドやプロパティの呼び出し一発で解決するような
> ものではないからです。
> # もちろん、文書の作り方(その部分を独立して移動できるように作る、など)
> # によってはほぼ一発にはなりますが。

ご指導のようにやりました。
結果を報告します。

Selection.PageSetup.TopMargin = MillimetersToPoints(37.5)
により、文書の全体の縦方向を移動できます。

Selection.MoveDown Unit:=wdLine, Count:=1
With Selection.ParagraphFormat
.SpaceBeforeAuto = False
.SpaceAfterAuto = False
.FirstLineIndent = MillimetersToPoints(19.3)
End With
により、窓部分の横方向を移動できます。

以下の質問があります。
1、以上の結果は一枚目だけ有効です。原因は何ですか?
2、窓部分の縦方向を移動するのは、別の方法がありますか?

よろしくお願いします。

K.J.K.

unread,
Jul 10, 2007, 4:53:19 AM7/10/07
to
sato wrote:
> 1、以上の結果は一枚目だけ有効です。原因は何ですか?

一枚目だけにしか効果を与えないオブジェクトを使っているからでは。

> 2、窓部分の縦方向を移動するのは、別の方法がありますか?

少なくとも、提示されたコードでは、移動がしやすく出来ているとは
思えません。
1, SelectionではなくRangeを使う。これは質問1にも通じます。
2, 全体を単一の文字列として扱う構造にするのではなく、適切に
テキストボックスを挿入して使う。こうしないと、部分限定での
移動が面倒。で、これを使うのならば、ShapeRangeプロパティが
使えます。

ただ、2のような使い方をするのであれば、私ならばWordではなく
Publisherを使います。Wordに慣れている人ならばともかく、私は
Wordはあまり得意ではありませんので、文章ではなくレイアウトが
重要な文書では、効率的な運用をする自信がないからです。

sato

unread,
Jul 11, 2007, 2:25:12 AM7/11/07
to

丁寧な回答を頂き、本当にありがとうございました。

> 1, SelectionではなくRangeを使う。これは質問1にも通じます。

すみません、 Rangeの使い方はわかりません。
お教えていただければ、幸いです。

> 2, 全体を単一の文字列として扱う構造にするのではなく、適切に
> テキストボックスを挿入して使う。こうしないと、部分限定での
> 移動が面倒。で、これを使うのならば、ShapeRangeプロパティが
> 使えます。

窓部分をテキストボックスを挿入しました、一緒に移動するのは便利ですね。
が、マクロを記録する時、テキストボックスは移動でませんでした。

> ただ、2のような使い方をするのであれば、私ならばWordではなく
> Publisherを使います。Wordに慣れている人ならばともかく、私は
> Wordはあまり得意ではありませんので、文章ではなくレイアウトが
> 重要な文書では、効率的な運用をする自信がないからです。

Publisherは持っていません。

K.J.K.

unread,
Jul 11, 2007, 3:36:55 AM7/11/07
to
K.J.K.です。

sato wrote:
>> 1, SelectionではなくRangeを使う。これは質問1にも通じます。
> すみません、 Rangeの使い方はわかりません。
> お教えていただければ、幸いです。

Helpを読みましたか?

>> 2, 全体を単一の文字列として扱う構造にするのではなく、適切に
>> テキストボックスを挿入して使う。こうしないと、部分限定での
>> 移動が面倒。で、これを使うのならば、ShapeRangeプロパティが
>> 使えます。
> 窓部分をテキストボックスを挿入しました、一緒に移動するのは便利ですね。
> が、マクロを記録する時、テキストボックスは移動でませんでした。

ですから、ShapeRangeプロパティを提示しているのですが。

で、Wordのオブジェクトについてこのような質問を続けるのであれば、
ニュースグループ:
microsoft.public.jp.word
で質疑応答を行うべきでは。私のような不慣れな人ではなく、実用的に
使っている人の意見をここよりも得やすいでしょうし。

sato

unread,
Jul 23, 2007, 10:41:33 PM7/23/07
to
お世話になりまして、誠にありがとうございます。

いつもご質問ばかりで申し訳ございません。

>> 窓部分をテキストボックスを挿入しました、一緒に移動するのは便利ですね。
>> が、マクロを記録する時、テキストボックスは移動でませんでした。

テキストボックスの書式設定のレイアウトの折り返しの種類を「前面」にすると、
テキストボックスが移動されました。

マクロとして記録して、
ActiveDocument.Shapes("Canvas 69").Select
Selection.ShapeRange.IncrementTop 100.8
Selection.ShapeRange.IncrementLeft 100.8
をVBに入れて、実行すると、次のエラーが出ました。
実行時エラー ’-2147024809(80070057)’
 指定した名前のアイラムが見つかりませんでした。

WordDoc.Shapes("Canvas 69").Select
Selection.ShapeRange.IncrementTop 100.8
Selection.ShapeRange.IncrementLeft 100.8
或いは
WordDoc.Shapes("Canvas 69").Select
WordDoc.Shapes("Canvas 69").IncrementTop 100.8
WordDoc.Shapes("Canvas 69").IncrementLeft 100.8
をVBに入れて、実行すると、エラーはないですが、
テキストボックスの反応はありませんでした。

K.J.K.

unread,
Jul 24, 2007, 4:20:25 AM7/24/07
to
K.J.K.です。

sato wrote:
> WordDoc.Shapes("Canvas 69").Select
> Selection.ShapeRange.IncrementTop 100.8
> Selection.ShapeRange.IncrementLeft 100.8

なんでそこまでSelect(ion)にこだわるのかわかりませんが、
これを基にするならば、


WordDoc.Shapes("Canvas 69").IncrementTop 100.8
WordDoc.Shapes("Canvas 69").IncrementLeft 100.8

でいいのでは。

sato

unread,
Jul 25, 2007, 12:56:08 AM7/25/07
to
ご指導をいただいて、誠ににありがとうございました。

"K.J.K." wrote

> これを基にするならば、
> WordDoc.Shapes("Canvas 69").IncrementTop 100.8
> WordDoc.Shapes("Canvas 69").IncrementLeft 100.8
> でいいのでは。

VBのプログラムは下記のとおりです。
実行して、テキストボックスは移動されません。
どこか間違いましたかな?

-------------------------------------------------------


Private Sub 差込印刷()
Dim Wordapp As Word.Application
Dim WordDoc As Word.Document
Dim WordDoc1 As Word.Document
Dim WordFile As String
Dim AddressFile As String 'Accessの住所録ファイル名

Set Wordapp = CreateObject("Word.Application")

WordFile = "C:\文面.doc"
Set WordDoc = Wordapp.Documents.Open(WordFile)
Set WordDoc1 = Wordapp.Documents(1)

AddressFile = "Test.mdb"


WordDoc.MailMerge.OpenDataSource Name:=AddressFile, _
LinkToSource:=True, Connection:="Test"

WordDoc.MailMerge.Destination = wdSendToNewDocument
WordDoc.MailMerge.SuppressBlankLines = False
WordDoc.MailMerge.Execute pause:=True

WordDoc.Shapes("Canvas 69").Select


WordDoc.Shapes("Canvas 69").IncrementTop 100.8
WordDoc.Shapes("Canvas 69").IncrementLeft 100.8

WordDoc.MailMerge.DataSource.FirstRecord = wdDefaultFirstRecord
WordDoc.MailMerge.DataSource.LastRecord = wdDefaultLastRecord



Set WordDoc1 = Wordapp.Documents("定型書簡1")
Wordapp.Quit SaveChanges:=wdDoNotSaveChanges
Set WordDoc1 = Nothing
Set WordDoc = Nothing
Set Wordapp = Nothing

End SUB
------------------------------------------------------------

K.J.K.

unread,
Jul 25, 2007, 8:02:19 AM7/25/07
to
K.J.K.です。

sato wrote:
> VBのプログラムは下記のとおりです。
> 実行して、テキストボックスは移動されません。
> どこか間違いましたかな?

ならば、どこか間違えたのでしょう。
Shapes("Canvas 69")は正しいオブジェクトを指しているのですか?

sato

unread,
Jul 27, 2007, 1:38:00 AM7/27/07
to
ご指導をいただいて、誠ににありがとうございました。

WordDoc.Shapes("Canvas 69").Select
WordDoc.Shapes("Canvas 69").IncrementTop 100.8
WordDoc.Shapes("Canvas 69").IncrementLeft 100.8

WordDoc.MailMerge.Destination = wdSendToNewDocument
の直後に移しますと、問題が解決されました。


0 new messages