- 締切済み
VBA 編集可能な範囲の指定につけたタイトル
ExcelのVBAでマクロを組んでいます。編集可能な範囲指定で、AllowEditRangesというのがありますよね。複数シートにAllowEditRangesで同じ範囲、同じタイトルで指定したとき、最初につけたタイトルに”_1”という文字が後ろについてしまいます。 この範囲は作業を終了したときに削除したいので、AllowEditRanges("編集可能範囲").Deleteとしても、削除できないシートがあるので調べてみると、タイトルが"編集可能範囲_1"となっているのです。編集可能とする範囲を複数作成した場合、タイトルを指定して削除したいのですが、どうやら自動的に名前が変わってしまうようです?なぜでしょう?インディックスで指定しても、それが何番目になっていて、どんな名前になっているかわからない場合はどうしたらいいのでしょう? 作業グループを作成し、ActiveWindow.SelectedSheets.Protection.AllowEditRanges(1).Delete ActiveWindow.SelectedSheets.Protection.AllowEditRanges(2).Delete これだと、インディクス2でエラーになってしまいます。なぜでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 ご質問が良く分からない部分があります。 問題は、「作業グループを作成し、」というところです。なぜ、作業グループを作成してから、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)となります。
お礼
pt.Title Like "編集可能範囲*" Then ・・・ という部分で対処できるようになりました。 作業グループを作成しているのは、作業したいシートが可変であるため、まずグループ化しないとシートが限定できないからです。インディックスが1つ消せば中身は(1)となるかと思ったんですが、(1)の分を2行連続で書いてもエラーだったため質問しました。どうもお世話になりました、ありがとうございました。