
同じような質問を多数みかけるのですが、回答を見ても解決できなかったので質問させてください。
ExcelデータをWordに差し込んで帳票を作りました。
印刷は一括で行えば良いのですが、個別にメール添付して送る必要があるため、差し込んだWordをそれぞれ個別に分割する作業をマクロで行いたいと思っています。
マクロはWEB上に出回っているものとほぼ同じで、他のファイルで全く同じ作業をしていたので、現在使用しているほかのWordファイル(正常に動いているもの)からコピーして利用することにしました。
1、差込を設定したWordに他のファイルからマクロをコピーして実行すると実行時エラー5852が出る
2、問題なく動くマクロがあるWordファイルをコピーし、内容を今回使用する帳票に書き換えて実行した場合は、エラーも出ずに問題なく作業が行える。※しかし既に帳票を整えてしまったため、できれば1の方法で行いたいです
実際に使用しているマクロコードとエラーは次のとおりです。
【コピー&貼り付けで使用しているマクロ】
Sub XXXX依頼シート()
Dim i As Long, LRec As Long
With ThisDocument.MailMerge
.DataSource.ActiveRecord = wdLastRecord
LRec = .DataSource.ActiveRecord
For i = 1 To LRec
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
.DataSource.FirstRecord = i
.DataSource.LastRecord = i
.DataSource.ActiveRecord = i
.Execute Pause:=True
ActiveDocument.SaveAs ThisDocument.Path & "\" & _
.DataSource.DataFields(20).Value & ".doc", wdFormatDocument
'ファイル名に使うフィールド(例では14番目)
ActiveDocument.Close
Next i
End With
End Sub
----------------------------------------------------------------
Private Sub Document_New()
End Sub
【エラー】
実行時エラー '5852'
指定したオブジェクトが見つかりません。
※デバッグをすると、4行目の「.DataSource.ActiveRecord = wdLastRecord」が黄色くなります
オブジェクトの指定がうまく行っていないのかな?とも思っているのですが、マクロも何も、難しいことはさっぱりわからず...わらをもつかむ思いで、質問させていただきました。
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
No.1の回答者です。
私もマクロについては初心者を少し卒業した程度の知識しかないので、
何が問題なのか知らずに使ったりしている場合もあります。
今回のマクロについても、何が問題なのかを理解しないままNo.3の回答をしているので、追加のアドバイスができないと書きましたが、補足やお礼にある内容を読んで、私なりに少し理解した部分がありました。
No.3の回答内容も、モジュールの使い方を理解していなかったために、
マクロの記載先(保存先)を間違えていました。
今回の場合、マクロを実行している差し込み用文書の文書名にVBEにて、
記載先がProject(文書名)における標準モジュールとしてのModule1などに記載しないと、「Active~~」などのコマンドが実行してするときに
アクティブになっている文書が違ってしまうことがあるということで、
エラーになるようです。
例えば文書名の標準モジュール以外に記載した場合に、ActiveRecordや
ActiveDocumentなどのコマンドの参照しているアクティブとなる文書が
マクロを記載している文書ではなく、別のものを参照してしまうことが
あり、そのためにエラーになるらしいです。
マクロの記載先が標準テンプレート(Normal)にした場合や、文書名の
ThisDocumentモジュールに記載した場合には、コマンドを実行していく
段階でActiveRecordがNormalなどのテンプレートだと、差し込みデータ
を持っている文書とは違うものなのでエラーになったり、私が間違えた
ThisDocumentモジュールに記載すると、ActiveDocumentがマクロを実行
している文書ではなく別に開いてしまう新規文書がアクティブな文書に
なるので、データーソースのフィールド名の参照ができなくなるので、
エラーになるようです。
「Active~~」などのコマンドをマクロとして記載する場合、マクロの
記載先を注意しないと、アクティブとなるオブジェクトが変わってきて
エラーとなるようです。
No.3の回答は、記載先がThisDocumentだったためにアクティブ文書で、
「4198:コマンドは正常終了できませんでした」というエラーが発生し
マクロを実行している文書と違う保存先であるActiveDocument.SaveAs
のコマンドが動いてしまい、同じエラーが私の環境でも起きてしまい、
前の回答内容となってしまいました。
これを
ThisDocument.SaveAs ThisDocument.Path & "\" & _
.DataSource.DataFields(10).Value & ".doc", wdFormatDocument
のように書けば、記載先の問題は起きずエラーも出ないのですが、別の
問題である[保存]ダイアログが表示されるようになるので、使い勝手が
悪くなります。
*************************************************
> NormalとProjectの2つが
Normalは、Word全体で使われる汎用テンプレートの名前であり、文書を
開いている場合は、常に参照されるテンプレートになります。
ここにマクロを記載すると、すべての文書で使えるようになるために、
コマンドの書き方を誤ると、開いているすべての文書に影響する場合が
あります。
また、アドインとして別のテンプレートを参照した場合には、Normalと
違ったTenplatePrject(テンプレート名)でも表示されます。
単純にProject(ファイル名)であれば、その文書に直接マクロを保存する
ものであり、他のファイルに影響を与えることはありません。
このProjectにもThisDocumentのモジュールと、挿入した標準モジュール
としてのモジュール名と、参照先Normalのように関連するテンプレート
の名前が付いたものがあると思います。
それぞれが違ったオブジェクトとして利用するようですが、現時点での
私は違いをはっきりと理解していません。ボヤっとした感じでの理解は
しているつもりですが、利用するときでの注意点などは知っているとは
言えないようです。
マクロの保存先としてテンプレートと文書があり、それぞれ違った対象
として利用するものですね。
http://www.hi-ho.ne.jp/tomita/tips/tips_wd_000.h …
http://www5d.biglobe.ne.jp/Jusl/BunsyoWordUp/Wor …
*************************************************
フィールドの個数と、そのフィールドを指定する場合のエラーが起きる
違いは検証していませんので分かりません。おそらく、フィールドの数
によるエラーが起きることはないと思いますよ。
ありがとうございます。仕事が忙しすぎて、内容の確認も御礼もできませんでした。
ちょっとまだこちらは優先度が低いので、内容については落ち着いてからゆっくり確認するとして、お忙しいなか色々とありがとうございました。
No.3
- 回答日時:
No.1の回答者です。
質問にあるマクロを少し編集して、私の環境で実行してみました。
(Windows8.1、Word2013)
> 実行時エラー '5852'
このエラーが出る条件としては、No.1の回答にあるもの以外で、マクロ
を実行する前に新規文書への差し込み(文書名 レター1 など)をして
いた場合やステップインでマクロの動作確認をした場合などに、エラー
として出るみたいですね。
新規文書に差し込まれたものを削除すれば、マクロの実行で上記エラー
が出ることはないみたいです。
> 「4198:コマンドは正常終了できませんでした」というエラー
このエラーは ActiveDocument.SaveAs または ActiveDocument.SaveAs2
などを実行したときなどに、[名前を付けて保存]ダイアログが出てから
エラーとして SaveAs のコマンドが正しく動作しなていないようです。
単純な ActiveDocument.SaveAs2 を使ったマクロを実行した場合でも、
同じエラーが出てしまうようです。かなり前に実行したときには問題が
起きなかったように記憶していますので、何かしらの更新プログラムが
影響している可能性があると思います。
同じエラーとなるトラブルがないかネット上を探してみましたが、私の
探し方が悪いのか見つけられませんでした。
どうしても差し込みした文書を個別で保存する必要があるのでしたら、
別の方法を検討してみるしかないと思います。
http://office-qa.com/Word/wd470.htm
これ以外のアドバイスはできませんので、これで退席いたします。
enunokokoroさんありがとうございました。
ご丁寧に書いていただいていたのですが、初心者には結局あまりよくわかりませんでした。
上記質問の補足に書いたとおり、5852のエラーはなぜか回避でき、4198のエラーも、指定するフィールドを19以下にすることでなんとか回避できました。
ここまではうまくいったので、同じ差込と同じマクロを用いて、若干違う様式でもう1つファイルを作成してみたところ、また同じエラー(5852)に悩まされ、enunokokoroさんの回答をもう一度読み、VBAのヘルプ、ネット情報、成功したマクロとの比較などなど、色々試してみましたところ、原因がわかりました。
No.2
- 回答日時:
#1さんと指摘している部分と半分は同じなのですが、
>1、差込を設定したWordに他のファイルからマクロをコピーして実行すると実行時エラー5852が出る
>4行目の「.DataSource.ActiveRecord = wdLastRecord」が黄色くなります
この2つから考えて、出来上がっているものに対しては、上記は可能でも、wdLastRecord などを持たないファイルに対して、
DataSource に、 wdLastRecord を指定しても何もエラーになるだけだと思うのです。
>ExcelデータをWordに差し込んで帳票を作りました。
.MailMerge.OpenDataSource Name:=●●●●
と関連つけてからでないと、次には進めないと思うのです。
ありがとうございました。
何故かわからないのですが、差込の再設定→マクロの作り直し(新しいマクロファイルにコピペしなおし)で、動くようになりました。
が、次は
「ActiveDocument.SaveAs ThisDocument.Path & "\" & _
.DataSource.DataFields(20).Value & ".doc", wdFormatDocument」
の行で「4198:コマンドは正常終了できませんでした」というエラーが出ます。
ちなみにいままで使っていたフィールドは17なのですが、20列目にに新しくファイル名にしたい情報を追加し、それを呼び出したいと思っているのですが...修行は続きそうです。涙
No.1
- 回答日時:
> 4行目の「.DataSource.ActiveRecord = wdLastRecord」が黄色く
デバックでエラーになるのなら、差し込むためのデータソースが開いた
文書で有効になっていない(Excelデータが関連していない)のでは?
通常の差し込み印刷の作業で、そのファイルで[結果のプレビュー]等の
作業ができる状態になっていますか?
もしもなっていない(SQLなどで「イイエ」を選んだ)のなら、データを
再指定するなどしてから、マクロを実行してみてください。
http://office-qa.com/Word/wd450.htm
ちなみに、私は質問にあるマクロを使ったことがないので、他のエラー
などには対処しませんのであしからず。
enunokokoroありがとうございました。
SQLでは「はい」を選んでおり、差し込までは特に問題がないと思います。
結果のプレビューもでき、出したいとおりの状態で印刷はしました。
ファイル分割からが問題です。
言葉の理解からはじめたほうがよさそうですね(涙)。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Wordマクロで指定したフォルダ名に保存する方法について 8 2022/12/13 11:35
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/10 11:34
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
このQ&Aを見た人はこんなQ&Aも見ています
-
Wordで差込印刷した後に別々のファイル名をつける
Word(ワード)
-
wordのマクロがわかりません。。。
Word(ワード)
-
Word差し込み後にセクション別に名前を付けて保存
Word(ワード)
-
-
4
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
5
Wordマクロで指定したフォルダ名に保存する方法について
Visual Basic(VBA)
-
6
【VBA】エクセルの指定セルの値を、Wordの指定場所に貼る方法
Excel(エクセル)
-
7
差し込み文書のルールで if then else を入れ子型で使いたい。
Word(ワード)
-
8
エクセルマクロでワードの一ページ目をコピーして新たに二ページを追加して、一ページ目の内容を貼り付ける
Visual Basic(VBA)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
ワードファイルの分割が出来ない
Word(ワード)
-
11
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
12
エクセルのVBAとワードを使った差し込み印刷
Word(ワード)
-
13
ワードからエクセルへ貼り付けるマクロ
Excel(エクセル)
-
14
エクセルマクロで差し込みしたものを1つのファイルでPDF化したいです
その他(Microsoft Office)
-
15
Excel VBAでWordの複数ファイルを統合する場合のエラーについて教えてください
Visual Basic(VBA)
-
16
Access VBA [リモートサーバーがないか使用できる状態ではありません]
Access(アクセス)
-
17
差し込み後、元データを変更し 差し込み先に反映させるには?
Access(アクセス)
-
18
差込印刷での条件指定
Excel(エクセル)
-
19
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
20
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ワードの読み上げ音声について ...
-
テスト問題などにある四角い空...
-
Office365 ワードのアイコンが...
-
ワード(office365)のワード、...
-
office ワードで段組みで分けた...
-
我慢の左上に文字が表示される現象
-
テキストボックスの文字列を上...
-
ワードが白と黒が反転してしま...
-
正の字の入力
-
<OFFICE>フォントを教えてく...
-
同様の質問になってしまいます...
-
グラフを挿入した時の線のスタ...
-
文章の途中に四角い穴埋めをつ...
-
txtって、ページ番号振れないん...
-
群像新人賞って、400字詰め換算...
-
縦使い・横書きは 画像のような...
-
マイクロソフトワードのアプリ...
-
国税局への申告用紙印刷
-
パソコンのワードでいつもは、...
-
エクセルExcelで作った表をワー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスの文字列を上...
-
office ワードで段組みで分けた...
-
ワード(office365)のワード、...
-
同様の質問になってしまいます...
-
テスト問題などにある四角い空...
-
ワードが白と黒が反転してしま...
-
我慢の左上に文字が表示される現象
-
文章の途中に四角い穴埋めをつ...
-
ワード PDF化した際、背景の...
-
群像新人賞って、400字詰め換算...
-
正の字の入力
-
縦使い・横書きは 画像のような...
-
マイクロソフトワードのアプリ...
-
パソコンを修理にだすときにワ...
-
パソコンのワードでいつもは、...
-
<OFFICE>フォントを教えてく...
-
エクセルExcelで作った表をワー...
-
ワードの隠し文字について。 隠...
-
グラフを挿入した時の線のスタ...
-
国税局への申告用紙印刷
おすすめ情報
もとのWordファイルに対し、差込のExcel再設定→マクロの作り直しで、5852のエラーは回避できました。
ただし次に以下のエラーが出ます。
「ActiveDocument.SaveAs ThisDocument.Path & "\" & _
.DataSource.DataFields(20).Value & ".doc", wdFormatDocument」
の行で
「4198:コマンドは正常終了できませんでした」
いままで使っていたフィールドは(17)なのですが、20列目にに新しくファイル名にしたい情報を追加し、それを呼び出したいと思っているのですがうまくいきません。ただし差込もとのExcelを整え、(20)を(19)にすると分割保存できることがわかりました。
このフィールドはそもそも20以上に設定するとうまく動かないものなのでしょうか。
結局なぜできるようになったのか、19以下のフィールドでうまくいかないのかはわからないのですが、なんとなくここまでは解決しました。
そこで同じ差込と同じマクロを用いて、若干違う書式でもう1つファイルを作成してみたところ、また同じエラー(5852)。いただいた回答を読みなおし、VBAのヘルプ、成功したマクロとの比較などなど、色々試してみましたところ、なんとなーくですが、原因がわかりました。
BVAのプロジェクトウィンドウにNormalとProjectの2つが並んでおり、Normalにマクロコードを記述してもうまく動きませんでした。Project内にコードを記載し、それを実行することでマクロがうまく動きましたが、NormalとProjectの違いなど、このあたりについて初心者にわかりやすい記載があるページをご存知の方がいらっしゃれば、教えていただきたいです。
よろしくお願いします。