プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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)となります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/10/23 13:30

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