アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excelにて住所録を作成し、ワードの差し込み印刷機能を使って住所ラベルを自動で作成しようとしています。 ワードにて、マニュアル(ウィザードではない)にてラベル作成をやって、マクロを記録して、進めようとしています。(一旦、ワードの世界でマクロを完成させ、それをエクセルに持ってくる考えです)
しかし、現在、ワードの世界で、以下の問題で、困っています。

①ラベルの選択にて、具体的な指示ができません。手では、ラベルの製品名 xxxxx を指定するのですが、マクロには記録されません。 マクロにてラベルの製品名を指定する方法がわかりません。 
②手作業で、フィールド(氏名とか住所とか)をセットしたのに対応して、
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:="氏名"
が記録されますが、一旦、マクロを走らせようとすると、このSelectionは、何?
と、止まってしまいます。 明らかに、左上の最初のラベルの枠ですが、そこを選択するコマンドがわかりません。
③シートの左上の1つの枠にラベルの出来上がりの文字の並びを手作業で与えます。 その他のすべての枠に反映する操作「複数ラベルに反映」に対するマクロの記録が、見当たりません。

以上、①、②、③に対してサジェスチョンをお願い申し上げます。

Sub test()
Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
ActiveDocument.MailMerge.MainDocumentType = wdMailingLabels '---①
ActiveDocument.MailMerge.OpenDataSource Name:= ”C:\---ExcelFile.xls", _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=wdOpenFormatAuto, Connection:= "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\---ExcelFile.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Typ" , SQLStatement:="SELECT * FROM `Sheet1$`", SQLStatement1:="", SubType:= wdMergeSubTypeAccess
Selection.TypeText Text:=" "   '------②
Selection.TypeParagraph
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:="氏名"
ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
End Sub

A 回答 (3件)

Excel側から制御する作業は、私は試していませんし、近日中にする予定


もありません。
ですから、NO.2のお礼にあるマクロのどこに問題があるのか検証もして
いません。

私がNo.2で示して物は、Wordのみでのマクロを実行した場合でも問題が
あるのでしょうか?
そうであるなら、私にはどこが問題なのか判断できません。
(マクロについてはいまだ勉強中なので)

とりあえず、関連するサポート技術情報を載せておきます。
https://support.microsoft.com/ja-jp/kb/285332
これを参考にされてはいかがでしょうか。

ちなみにNo.2のお礼にあるマクロは、いくつかの部分で私が示したもの
より省略した部分が幾つかあるのですが、Wordオブジェクトを制御する
場合は省略しないほうがベストな場合もあるそうです。
上位オブジェクトもできるだけ記載したほうがよいと思いますよ。

複数ラベルに反映部分もそうですし、フィールドの配置もそうです。
省略する場合、事前に変数を宣言しておくなどしないと駄目なのでは?

なお、これ以上のアドバイスは私には荷が重いのでこれで失礼します。
    • good
    • 0
この回答へのお礼

ありがとうございました。
今後の勉強のヒントになりました。

お礼日時:2015/07/28 22:41

No.1の回答者です。



MailingLabelの方法だけに拘っていますが、これは指定した製品ラベル
の枠を作る方法として有効だと思うので参考として載せましたが、この
コマンドだけで差し込み印刷と同じにするのは難しいのでは?

前の回答でも書いていますが、差し込み印刷をマクロ記録したものへの
前後に①と③を追加することで、希望していることが可能ではないかと
思うのです。(実際に簡単な検証作業では可能でした)

Sub test_2()

' 差し込み印刷で記録したものの前に製品ラベルの枠を追加
' 通常のラベル作成をマクロ記録したもの
Application.MailingLabel.CreateNewDocumentByID _
LabelID:="########", _
Address:="", AutoText:="", LaserTray:=wdPrinterManualFeed, _
ExtractAddress:=False, PrintEPostageLabel:=False, Vertical:=False

' 差し込み印刷のマクロ記録(質問者が書いたものをなので私と違うが)
Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0

ActiveDocument.MailMerge.MainDocumentType = wdMailingLabels
ActiveDocument.MailMerge.OpenDataSource Name:= ”C:\---ExcelFile.xls", _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=wdOpenFormatAuto, Connection:= "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\---ExcelFile.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Typ" , SQLStatement:="SELECT * FROM `Sheet1$`", SQLStatement1:="", SubType:= wdMergeSubTypeAccess

ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:="氏名"

' 複数ラベルの反映も実行
ActiveDocument.MailMerge.MainDocumentType = _
wdMailingLabels
WordBasic.MailMergePropagateLabel

End Sub

上記のような書き方で、問題なく用意した氏名の差し込みフィールドを
複数ラベルに反映したもので作成できました。
    • good
    • 0
この回答へのお礼

遅くなりました。サジェスチョンありがとうございます。
まだ、うまく行っておりません。
ラベルの枠は、OK。
Excel住所録とのリンクは、エラーは出ていない。しかし、具体的に
住所録のFieldを与えようとすると、うまく行きません。
宜しくお願い致します。

Sub Test3()
Dim WdApp As Word.Application
Dim WdDoc As Word.Document
Set WdApp = New Word.Application
Set WdDoc = New Word.Document
WdApp.Visible = True

WdApp.Application.MailingLabel.DefaultPrintBarCode = False
Set WdDoc = WdApp.Documents.Add
WdApp.Application.MailingLabel.CreateNewDocumentByID LabelID:="1375763051",・・・・・
WdDoc.MailMerge.MainDocumentType = wdMailingLabels
WdDoc.MailMerge.OpenDataSource Name:="C:\住所録.xlsx", ・・・・記録のまま・・・・・ wdMergeSubTypeAccess
'住所リスト(Excel)との接続の部分がうまく行っておりません。
WdApp.Selection.TypeText Text:="〒" 'OK
' WdApp.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField, Text:="""郵便番号""" 'NG
WdApp.Selection.TypeParagraph 'OK
' 複数ラベルへの反映も、現時点うまく行っていません。
WdApp.WordBasic.MailMergePropagateLabel 'NG
WdApp.Quit
Set WdApp = Nothing
Set WdDoc = Nothing
End Sub

お礼日時:2015/07/20 16:33

私はマクロについては初心者をやっと脱しただけなので、詳しいことは


わかりません。知っている範囲で分かる範囲のみのアドバイスなので、
詳細なことは訊ねないでくださいね。
Wordのバージョンが記載されていないので、大雑把な説明です。

① ラベルの製品番号の指定方法について。
差し込み印刷からのラベル指定だとマクロ記録されないので、差し込み
印刷ではなく、通常のラベル作成方法をマクロ記録します。
そうすると、以下のような記録が取得できます。

Application.MailingLabel.CreateNewDocumentByID _
LabelID:="########", _
Address:="", AutoText:="", LaserTray:=wdPrinterManualFeed, _
ExtractAddress:=False, PrintEPostageLabel:=False, Vertical:=False

上記のLabelID:="########"が製品番号になります。

これを差し込み印刷で記録したものの一番最初に追加すれば、ラベルの
枠が設定されると思います。

② 差し込みフィールドの挿入部分について
差し込みフィールドとして記録された部分は問題ないと思います。
Selection.TypeText Text:=" "
Selection.TypeParagraph
この部分を削除して実行した場合にもエラーが表示されますか?

③ 複数のラベルに反映するほうほうについて
海外でのWordマクロのサイトを閲覧してみると、以下のような書き方で
実行できるようです。

ActiveDocument.MailMerge.MainDocumentType = _
wdMailingLabels
WordBasic.MailMergePropagateLabel

このマクロを差し込み印刷にて記録した部分の最終部分に追加すれば、
複数ラベルに反映できると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。MailingLabelの方法があることを理解しました。
残された問題は、如何にリスト(簡単なデータベース)からひとつずつ取り出して、次から次へ転記していくかです。MailingLabelの方法にて、リストとリンクを取る方法を探しています。

或は、MailingLabelの方法にて、直接書き込むとして、左上の1番目のラベルにマクロで一人分もってきて書き込む。次に、右のラベルに移動して、二人目の情報を書き込む。
・・・・  この時の問題は、Selectionの動きです。

以上、よろしくお願い致します。

お礼日時:2015/07/16 21:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!