システムwiki

ドキュメントの途中でハングアップしているコンテンツコントロールのチェックボックスをチェックするマクロ

Jon_VDC 解決済 最終更新日:2022-06-26 09:00

やあ.多数の個別のドキュメントを生成、入力(CSVのデータとローカルフォルダーの写真を使用)、および保存するマクロを使用して、マクロ対応のWordテンプレートを作成しました.マクロの一部を通過し、以下のコードを使用して、CSV内の指定されたデータフィールドに関連付けられたすべてのコンテンツコントロールチェックボックスをチェックします.値は1です.(ichkbxは以前は整数型として宣言されていました.)マクロが強調表示された行でハングアップし、次のエラーメッセージが表示されます:「ランタイムエラー '5941':コレクションの要求されたメンバーは存在しません.」
これは、ドキュメントが保存される前のマクロの最後の部分です.したがって、マクロを実行すると、新しいドキュメントが生成され、メールのマージと写真の部分が正しく機能し、コンテンツコントロールの90%がチェックされることを確認できます.マクロが停止する前にボックスが適切にチェックされ、エラーメッセージが表示されます.停止した場所のコンテンツコントロールチェックボックスについては何も変わりません.フィールド名やコンテンツコントロール設定などを3回チェックしました.右を向いてくれた人に感謝します.問題を克服するための方向性!

ichkbx=1の場合docLetters.ContentControls.Countへ

cbtag= docLetters.ContentControls(ichkbx).Title

If docLetters.ContentControls(ichkbx).Type= wdContentControlCheckBox Then

If docMail.MailMerge.DataSource.DataFields(cbtag).Value= "1" Then

docLetters.ContentControls(ichkbx).Checked= True

それ以外の場合:docLetters.ContentControls(ichkbx).Checked= False

終了する場合

終了する場合

次へ

返信リスト(回答:10)

9 #
JayFree 1

インデックス付き変数(この場合はDataFields(cbtag))を含む行で「requestedmemberofthecollectiondoesnotexist」エラーが発生すると、インデックスが実際に存在する範囲外にあることを示します.インデックスが数値変数の場合、それは0であるか、存在するアイテムの数よりも大きいことを意味します.cbtagのように文字列変数の場合、エラーはそのインデックス値を持つアイテムがないことを意味します(通常、タイトルに含まれるスペースが有効なインデックスより多いか少ないか、大文字と小文字が一致しません.

応答9# ->にスキップ
8 #
Jon

こんにちはジェイ、

お返事ありがとうございます.cbtagが文字列変数であることは間違いありません.あなたを正しく理解していると仮定して、もう一度マクロを実行し、チェックされているはずのチェックボックスがチェックされなくなったことを確認し、Wordドキュメントのコンテンツコントロールのタイトルが完全に一致することを確認しました(不一致の大文字または余分なスペース)データのソースとして機能するCSVファイル内のもの.何かが目立つことを願って、いくつかのスクリーンショットを添付しました.ご覧いただきありがとうございます!

エラーコード:

問題のあるコード行を示すデバッグビュー:

マクロを実行したときに作成され、CSVファイルの最初の行のデータで埋められた新しいドキュメントの8ページの一部.Riverine/Tidal/Bothセクションですべてのチェックボックスが期待どおりにチェックされています(つまり、ここでは「Both」の値がゼロであるため、チェックしないでください. CSVで1に変更し、機能することを確認しました).最初にチェックする必要があるチェックボックスは、100年セクションの[ゲージ分析]ボックスです.

デザインモードをオンにすると、このコンテンツコントロールチェックボックスのタイトルとタグの両方がスペースなしの「100Yr_Gage」であることがわかります.

CSVファイルを開くと(Wordを閉じた後)、そのフィールドに対応するタイトルが表示されます.スペースを追加したり、スペルミスや大文字と小文字を間違えたりすることはありません.

応答8# ->にスキップ
10 #
DougRob

エラーが発生した場合、コード内のcbtagにカーソルを合わせるとどうなりますか?

応答10# ->にスキップ
6 #
Jon

こんにちはダグ.問題がその100Yr_Gageフィールドにあることを確認するテキストが表示されます.(これは役立つヒントです. ありがとう!)

他のいくつかの手がかりは次のとおりです.
-100Yr_GageコンテンツコントロールをWordテンプレートから削除すると、マクロは次のチェックボックスである100Yr_Regressでハングアップします.
-以前の(機能している)チェックボックスの1つを名前変更し、その100Yr_Gage名を使用すると、その場所でハングアップし始めます.

応答6# ->にスキップ
7 #
JayFree

docMail.MailMerge.DataSource.DataFieldsオブジェクトがCBの後にスプレッドシートのどの列にも到達できないように聞こえ始めています.マクロでデバッグモードになっているときに、コマンドを入力してイミディエイトwindows を開いてみることができます

Print docMail.MailMerge.DataSource.DataFields.Count

Enterキーを押します.これがDataFieldsオブジェクトでサポートされているプロパティである場合、スプレッドシートから取得したアイテムの数が出力されます.その接続が内部でどのように機能するかわからないので、これ以上推測することはできませんが、ダグはその領域でより良い知識を持っている可能性があります.

応答7# ->にスキップ
3 #
Jon

ジェイ、私は問題かもしれない何かに出くわしたと思います、そしてそれは基本的にあなたが最初に言ったことです.DataFieldsにウォッチを設定し、そのアイテムを開くと、リストされた名前の前面に「M_」が追加されていることがわかります.これは、後続のアイテムにも当てはまるようです.タイトルとタグの両方として「100Yr_Gage」を設定したコンテンツコントロールのプロパティwindows には表示されないため、どこから来たのかわかりません.以下に示す名前を編集できる別の場所はありますか?
最悪の場合、CSVフィールド名とコンテンツコントロールのタイトルとタグを変更して「M_」を含めることができることを確認しました.将来のために名前を編集する方法を知りたいのですが、それは機能します.

応答3# ->にスキップ
2 #
DougRob 3

数字で始まるマージフィールドが挿入された場合 Word文書では、Wordはフィールド名の前にM_を挿入します.

問題を回避する方法は、マージフィールドが数字で始まらないようにすることです.

応答2# ->にスキップ
1 #
Jon

ありがとうダグ!これは興味深い雑学クイズであり、将来のために知っておくとよいでしょう.これに対するあなたとジェイのサポートに感謝します!

応答7# ->にスキップ
5 #
Jon

ジェイ、素晴らしい推測、そして私が考えていた何か.以前、CSVから以前のフィールドの1つを削除し、対応するコンテンツコントロールをWordテンプレートから削除して、その100Yr_Gageでのカウントを1つ減らすことで理論をテストしようとしましたが、それでも同じ場所でハングアップしました.
私はあなたが推薦したものを試しました、そしてそれは私に116のカウントを与えました、それはCSVのフィールドの総数に対応します.それがぶら下がっている列は80のカウントになると私は信じています.

応答5# ->にスキップ
4 #
JayFree

さて、私は今あなたと同じように公式に混乱しています.

何が起こっているのかを理解するためのもう1つの提案:デバッグモードで、イミディエイトwindows を使用して次のようなコマンドを実行してみてください

PrintdocMail.MailMerge.DataSource.DataFields(100Yr_Regress).Value

および列CD以降のデータフィールド名.それらのいずれかが機能しますか、それともそのようなメンバーがいないと主張しますか?