• 締切済み

VBA 編集可能な範囲の指定につけたタイトル

ExcelのVBAでマクロを組んでいます。編集可能な範囲指定で、AllowEditRangesというのがありますよね。複数シートにAllowEditRangesで同じ範囲、同じタイトルで指定したとき、最初につけたタイトルに”_1”という文字が後ろについてしまいます。 この範囲は作業を終了したときに削除したいので、AllowEditRanges("編集可能範囲").Deleteとしても、削除できないシートがあるので調べてみると、タイトルが"編集可能範囲_1"となっているのです。編集可能とする範囲を複数作成した場合、タイトルを指定して削除したいのですが、どうやら自動的に名前が変わってしまうようです?なぜでしょう?インディックスで指定しても、それが何番目になっていて、どんな名前になっているかわからない場合はどうしたらいいのでしょう? 作業グループを作成し、ActiveWindow.SelectedSheets.Protection.AllowEditRanges(1).Delete ActiveWindow.SelectedSheets.Protection.AllowEditRanges(2).Delete これだと、インディクス2でエラーになってしまいます。なぜでしょうか?

みんなの回答

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

こんにちは。 ご質問が良く分からない部分があります。 問題は、「作業グループを作成し、」というところです。なぜ、作業グループを作成してから、Protection.AllowEditRange を設定させるのでしょうか?マクロで、シートを別々にして設定させればよいのではありませんか?「作業グループ」というのは、原則的には、ワークシート上で3-D(串刺し)処理をすることです。VBAの場合は、さほどタイムロスを感じないと思います。 それと、今度は削除する場合ですが、いくつか範囲の編集の許可した領域があって、その中から、編集可能範囲を削除するのか、それとも全部削除してしまうのか、そこらによってコードが変わってくるように思います。 削除は、全部削除するようになっています。 '----------------------------------- 'サンプルマクロ '----------------------------------- Sub ProtectArrowEditRng() '設定 Dim Sh As Worksheet For Each Sh In ActiveWorkbook.Worksheets  Sh.Protection.AllowEditRanges.Add "編集可能範囲", Sh.Range("A1:A10") Next Sh End Sub '----------------------------------- Sub ChekerProtectAllowEdRange() '全部削除 Dim Sh As Worksheet Dim pt As AllowEditRange For Each Sh In ActiveWorkbook.Worksheets   Sh.Activate 'これを入れないと削除しない   If Sh.Protection.AllowEditRanges.Count > 0 Then    For Each pt In Sh.Protection.AllowEditRanges     pt.Delete    Next pt   End If Next Sh End Sub '----------------------------------- '補足(部分削除する場合) Sub ChekerProtectAllowEdRange2()  '部分削除  Dim Sh As Worksheet  Dim pt As AllowEditRange  For Each Sh In ActiveWorkbook.Worksheets   Sh.Activate   If Sh.Protection.AllowEditRanges.Count > 0 Then    For Each pt In Sh.Protection.AllowEditRanges     'タイトルに条件を入れれば、名前に合うものだけを削除します。     If pt.Title Like "編集可能範囲*" Then      pt.Delete     End If    Next pt   End If  Next Sh End Sub >ActiveWindow.SelectedSheets.Protection.AllowEditRanges(2).Delete >これだと、インディクス2でエラーになってしまいます。なぜでしょうか? AllowEditRanges(2) インデックスというのは、順序のことですから、一つ消せば、中身は、(1)となります。

nao_lin
質問者

お礼

pt.Title Like "編集可能範囲*" Then ・・・ という部分で対処できるようになりました。 作業グループを作成しているのは、作業したいシートが可変であるため、まずグループ化しないとシートが限定できないからです。インディックスが1つ消せば中身は(1)となるかと思ったんですが、(1)の分を2行連続で書いてもエラーだったため質問しました。どうもお世話になりました、ありがとうございました。

関連するQ&A