
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
No.3ベストアンサー
- 回答日時:
Excel側から制御する作業は、私は試していませんし、近日中にする予定
もありません。
ですから、NO.2のお礼にあるマクロのどこに問題があるのか検証もして
いません。
私がNo.2で示して物は、Wordのみでのマクロを実行した場合でも問題が
あるのでしょうか?
そうであるなら、私にはどこが問題なのか判断できません。
(マクロについてはいまだ勉強中なので)
とりあえず、関連するサポート技術情報を載せておきます。
https://support.microsoft.com/ja-jp/kb/285332
これを参考にされてはいかがでしょうか。
ちなみにNo.2のお礼にあるマクロは、いくつかの部分で私が示したもの
より省略した部分が幾つかあるのですが、Wordオブジェクトを制御する
場合は省略しないほうがベストな場合もあるそうです。
上位オブジェクトもできるだけ記載したほうがよいと思いますよ。
複数ラベルに反映部分もそうですし、フィールドの配置もそうです。
省略する場合、事前に変数を宣言しておくなどしないと駄目なのでは?
なお、これ以上のアドバイスは私には荷が重いのでこれで失礼します。
No.2
- 回答日時:
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
上記のような書き方で、問題なく用意した氏名の差し込みフィールドを
複数ラベルに反映したもので作成できました。
遅くなりました。サジェスチョンありがとうございます。
まだ、うまく行っておりません。
ラベルの枠は、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
No.1
- 回答日時:
私はマクロについては初心者をやっと脱しただけなので、詳しいことは
わかりません。知っている範囲で分かる範囲のみのアドバイスなので、
詳細なことは訊ねないでくださいね。
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
このマクロを差し込み印刷にて記録した部分の最終部分に追加すれば、
複数ラベルに反映できると思います。
ありがとうございます。MailingLabelの方法があることを理解しました。
残された問題は、如何にリスト(簡単なデータベース)からひとつずつ取り出して、次から次へ転記していくかです。MailingLabelの方法にて、リストとリンクを取る方法を探しています。
或は、MailingLabelの方法にて、直接書き込むとして、左上の1番目のラベルにマクロで一人分もってきて書き込む。次に、右のラベルに移動して、二人目の情報を書き込む。
・・・・ この時の問題は、Selectionの動きです。
以上、よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/11 12:55
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/12 10:10
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別シートのマクロを実行する方法
-
エクセルのマクロボタンが編集...
-
Application.Runエラー(1004)
-
private sub にしたらマクロが...
-
ExcelのVBAでDisplayalertsで警...
-
EXCELマクロ
-
access2010 コマンドまたはアク...
-
ExcelVBAで右クリックメニュー...
-
エクセルのマクロ
-
Access終了時にマクロまたはVBA...
-
excelで会議室予約表の作成(マ...
-
アクセスのマクロについて
-
InputBox内の表示について
-
マクロとモジュールの違いを教...
-
マクロが登録できません
-
エクセルVBAで、ボタンの文字を...
-
アクセスの更新クエリをフォームで
-
マクロ 戻るボタンを押したらシ...
-
エクセル VBA SendKeys ループ...
-
オートシェイプの黄色いハンド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別シートのマクロを実行する方法
-
Application.Runエラー(1004)
-
エクセルのマクロボタンが編集...
-
Access終了時にマクロまたはVBA...
-
エクセルVBAで、ボタンの文字を...
-
シート保護を掛けたまま並べ替...
-
InputBox内の表示について
-
access2010 コマンドまたはアク...
-
マクロ 戻るボタンを押したらシ...
-
特定のシートだけ印刷はマクロ...
-
マクロが登録できません
-
アクセスのマクロについて
-
エクセルの右クリックにオートS...
-
private sub にしたらマクロが...
-
エクセル VBA SendKeys ループ...
-
エクセルのマクロ
-
今日の日付の範囲を指定して印...
-
AccessでExcelファイルを印刷
-
ExcelVBAで右クリックメニュー...
-
Workbook_Openを起動時以外に呼...
おすすめ情報