• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで文書保護の例外処理領域を削除したい!)

VBAで文書保護の例外処理領域を削除

このQ&Aのポイント
  • Word2007(Word2003でも可)で、コマンドボタン押下後に文書保護を解除し、設定してあった例外処理の領域を削除するマクロを作成しようとしています。しかし、例外処理の領域削除が上手くいかず、困っています。
  • 例外処理の領域を削除するために、テキストボックスを選択し、新しいマクロの記録を用いて以下の構文を生成しましたが、実行時エラーが発生しています。「ActiveDocument.Shapes("Text Box XXX").Select Selection.Editors.Add wdEditorEveryone Selection.Editors(wdEditorEveryone).Delete」
  • このエラーメッセージ「実行時エラー5941:指定されたコレクションのメンバは存在しません。」が表示されており、マクロを実行することができません。ご指摘やアドバイスがあればお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 やっと原因が分かりました。 理由は、文字(Character)そのものに、Editors ロックが掛かっているということです。これは、Excelでも同じような現象がありますね。 Google でもヒットしないので、参考にされる可能性があるので、つたない英語の解説を入れてみました。ただし、英語フォントで見ると、全角が完全に文字化けしているでしょうけれども。(^^; わざと、二重のループをしたのは、一回で外れないことがあるようですね。 それと、文字列が一括で、編集制限されたものは、一回で済みますが、個別に入れられたものに関しては、文字でない部分に編集制限があると、外れない可能性があります。 また、 If cr.Editors.Count > 0 Else  Exit For End 通常は、としても良いようです。通常の設定なら、1回きりで済むようです。 '-------------------------------------------- Sub DocumentProtect_EditorsRangeUnLockInShape()   Dim txtRng As Range   Dim i As Integer   Dim j As Integer   Dim cr As Variant   'When the Document is locked by PassWord   On Error Resume Next   ActiveDocument.Unprotect "PSWD"   On Error GoTo 0   'Only one 'TextBox' of Shapes in ActiveDocument   Set txtRng = ActiveDocument.Shapes(1).TextFrame.TextRange   'check each character with Editor(limitation of editoring)   On Error Resume Next   'If the characters are locked twice, d'better go in loop two times.(maybe)   For Each cr In txtRng.Characters     If cr.Editors.Count > 0 Then       For j = 0 To cr.Editors.Count - 1         For i = 1 To cr.Editors.Count           cr.Editors(i).Delete         Next i       Next j     End If   Next cr End Sub

koutan5
質問者

お礼

Wendy02さん 度々のご回答ありがとうございます!! なるほど、オートシェイプに例外処理がついていたわけではなく、 入力テキストに例外処理がついているということだったのですね! 今、試せる環境にないので、連休明けたら試してみたいと思います! 大変参考になりました!ありがとうございました!

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 しばらく調べてみたのですが、どうしても、テキストボックス(オートシェイプ)の中の文字列に対する[例外処理]のオブジェクトが取れません。Editors オブジェクトが、特別な仕様ではなく、テキストボックス側のほうが特別な仕様だからのようです。 Shapes のTextFrameやShapeRangeのTextFrameからでは、Editors オブジェクトのEditor プロパティは取れないような気がします。 Shapes は、もともと、Collection ですから、ActiveDocument からダイレクトで、このオブジェクトを取れる方法があれば、なんとかなるような気がしたのですが分かりません。 これについては、インターネットでも書いている人がいません。私が見たすべて、ActiveDocument の[例外処理]だけで、ありえないわけではないのですが、テキストボックスを指定して、[例外処理]を掛けるというようなことは、見当たりません。 ただ、実際には、テキストを取り出して、上書きしてしまえば、その[例外処理]は外れてしまいますね。 Dim txt As String  txt = ActiveDocument.Shapes(1).TextFrame.TextRange.Text  ActiveDocument.Shapes(1).TextFrame.TextRange.Text = txt

koutan5
質問者

お礼

ご回答ありがとうございます!! やはり、一筋縄ではいかないのですね・・・orz ただ、最後の方法だと確かに例外処理がはずれますね! なるほど!! 他に方法が見つからなければこの方法を組み込みたいと思います。 貴重なご意見ありがとうございました!

関連するQ&A