プロが教えるわが家の防犯対策術!

同じような質問を多数みかけるのですが、回答を見ても解決できなかったので質問させてください。

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」が黄色くなります



オブジェクトの指定がうまく行っていないのかな?とも思っているのですが、マクロも何も、難しいことはさっぱりわからず...わらをもつかむ思いで、質問させていただきました。
よろしくお願いいたします。

質問者からの補足コメント

  • もとのWordファイルに対し、差込のExcel再設定→マクロの作り直しで、5852のエラーは回避できました。

    ただし次に以下のエラーが出ます。
    「ActiveDocument.SaveAs ThisDocument.Path & "\" & _
    .DataSource.DataFields(20).Value & ".doc", wdFormatDocument」
    の行で
    「4198:コマンドは正常終了できませんでした」


    いままで使っていたフィールドは(17)なのですが、20列目にに新しくファイル名にしたい情報を追加し、それを呼び出したいと思っているのですがうまくいきません。ただし差込もとのExcelを整え、(20)を(19)にすると分割保存できることがわかりました。
    このフィールドはそもそも20以上に設定するとうまく動かないものなのでしょうか。

      補足日時:2015/08/11 10:07
  • うーん・・・

    結局なぜできるようになったのか、19以下のフィールドでうまくいかないのかはわからないのですが、なんとなくここまでは解決しました。
    そこで同じ差込と同じマクロを用いて、若干違う書式でもう1つファイルを作成してみたところ、また同じエラー(5852)。いただいた回答を読みなおし、VBAのヘルプ、成功したマクロとの比較などなど、色々試してみましたところ、なんとなーくですが、原因がわかりました。

    BVAのプロジェクトウィンドウにNormalとProjectの2つが並んでおり、Normalにマクロコードを記述してもうまく動きませんでした。Project内にコードを記載し、それを実行することでマクロがうまく動きましたが、NormalとProjectの違いなど、このあたりについて初心者にわかりやすい記載があるページをご存知の方がいらっしゃれば、教えていただきたいです。
    よろしくお願いします。

      補足日時:2015/08/11 15:42

A 回答 (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 …
*************************************************

フィールドの個数と、そのフィールドを指定する場合のエラーが起きる
違いは検証していませんので分かりません。おそらく、フィールドの数
によるエラーが起きることはないと思いますよ。
    • good
    • 1
この回答へのお礼

ありがとうございます。仕事が忙しすぎて、内容の確認も御礼もできませんでした。
ちょっとまだこちらは優先度が低いので、内容については落ち着いてからゆっくり確認するとして、お忙しいなか色々とありがとうございました。

お礼日時:2015/08/20 13:53

No.1の回答者です。


質問にあるマクロを少し編集して、私の環境で実行してみました。
(Windows8.1、Word2013)

> 実行時エラー '5852'
このエラーが出る条件としては、No.1の回答にあるもの以外で、マクロ
を実行する前に新規文書への差し込み(文書名 レター1 など)をして
いた場合やステップインでマクロの動作確認をした場合などに、エラー
として出るみたいですね。
新規文書に差し込まれたものを削除すれば、マクロの実行で上記エラー
が出ることはないみたいです。


> 「4198:コマンドは正常終了できませんでした」というエラー
このエラーは ActiveDocument.SaveAs または ActiveDocument.SaveAs2
などを実行したときなどに、[名前を付けて保存]ダイアログが出てから
エラーとして SaveAs のコマンドが正しく動作しなていないようです。

単純な ActiveDocument.SaveAs2 を使ったマクロを実行した場合でも、
同じエラーが出てしまうようです。かなり前に実行したときには問題が
起きなかったように記憶していますので、何かしらの更新プログラムが
影響している可能性があると思います。

同じエラーとなるトラブルがないかネット上を探してみましたが、私の
探し方が悪いのか見つけられませんでした。

どうしても差し込みした文書を個別で保存する必要があるのでしたら、
別の方法を検討してみるしかないと思います。
http://office-qa.com/Word/wd470.htm

これ以外のアドバイスはできませんので、これで退席いたします。
    • good
    • 0
この回答へのお礼

enunokokoroさんありがとうございました。
ご丁寧に書いていただいていたのですが、初心者には結局あまりよくわかりませんでした。
上記質問の補足に書いたとおり、5852のエラーはなぜか回避でき、4198のエラーも、指定するフィールドを19以下にすることでなんとか回避できました。

ここまではうまくいったので、同じ差込と同じマクロを用いて、若干違う様式でもう1つファイルを作成してみたところ、また同じエラー(5852)に悩まされ、enunokokoroさんの回答をもう一度読み、VBAのヘルプ、ネット情報、成功したマクロとの比較などなど、色々試してみましたところ、原因がわかりました。

お礼日時:2015/08/11 15:36

#1さんと指摘している部分と半分は同じなのですが、



>1、差込を設定したWordに他のファイルからマクロをコピーして実行すると実行時エラー5852が出る

>4行目の「.DataSource.ActiveRecord = wdLastRecord」が黄色くなります

この2つから考えて、出来上がっているものに対しては、上記は可能でも、wdLastRecord などを持たないファイルに対して、
DataSource に、 wdLastRecord を指定しても何もエラーになるだけだと思うのです。

>ExcelデータをWordに差し込んで帳票を作りました。

 .MailMerge.OpenDataSource Name:=●●●●
と関連つけてからでないと、次には進めないと思うのです。
    • good
    • 0
この回答へのお礼

ありがとうございました。

何故かわからないのですが、差込の再設定→マクロの作り直し(新しいマクロファイルにコピペしなおし)で、動くようになりました。
が、次は
「ActiveDocument.SaveAs ThisDocument.Path & "\" & _
.DataSource.DataFields(20).Value & ".doc", wdFormatDocument」
の行で「4198:コマンドは正常終了できませんでした」というエラーが出ます。

ちなみにいままで使っていたフィールドは17なのですが、20列目にに新しくファイル名にしたい情報を追加し、それを呼び出したいと思っているのですが...修行は続きそうです。涙

お礼日時:2015/08/06 15:51

> 4行目の「.DataSource.ActiveRecord = wdLastRecord」が黄色く


デバックでエラーになるのなら、差し込むためのデータソースが開いた
文書で有効になっていない(Excelデータが関連していない)のでは?

通常の差し込み印刷の作業で、そのファイルで[結果のプレビュー]等の
作業ができる状態になっていますか?
もしもなっていない(SQLなどで「イイエ」を選んだ)のなら、データを
再指定するなどしてから、マクロを実行してみてください。
http://office-qa.com/Word/wd450.htm

ちなみに、私は質問にあるマクロを使ったことがないので、他のエラー
などには対処しませんのであしからず。
    • good
    • 0
この回答へのお礼

enunokokoroありがとうございました。

SQLでは「はい」を選んでおり、差し込までは特に問題がないと思います。
結果のプレビューもでき、出したいとおりの状態で印刷はしました。
ファイル分割からが問題です。

言葉の理解からはじめたほうがよさそうですね(涙)。

お礼日時:2015/08/06 10:18

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A