ExcelのVBAでマクロを組んでいます。編集可能な範囲指定で、AllowEditRangesというのがありますよね。複数シートにAllowEditRangesで同じ範囲、同じタイトルで指定したとき、最初につけたタイトルに”_1”という文字が後ろについてしまいます。
この範囲は作業を終了したときに削除したいので、AllowEditRanges("編集可能範囲").Deleteとしても、削除できないシートがあるので調べてみると、タイトルが"編集可能範囲_1"となっているのです。編集可能とする範囲を複数作成した場合、タイトルを指定して削除したいのですが、どうやら自動的に名前が変わってしまうようです?なぜでしょう?インディックスで指定しても、それが何番目になっていて、どんな名前になっているかわからない場合はどうしたらいいのでしょう?
作業グループを作成し、ActiveWindow.SelectedSheets.Protection.AllowEditRanges(1).Delete
ActiveWindow.SelectedSheets.Protection.AllowEditRanges(2).Delete
これだと、インディクス2でエラーになってしまいます。なぜでしょうか?
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)となります。
pt.Title Like "編集可能範囲*" Then ・・・
という部分で対処できるようになりました。
作業グループを作成しているのは、作業したいシートが可変であるため、まずグループ化しないとシートが限定できないからです。インディックスが1つ消せば中身は(1)となるかと思ったんですが、(1)の分を2行連続で書いてもエラーだったため質問しました。どうもお世話になりました、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userform転記のみ編集可 1 2023/06/29 11:03
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) エクセルVBAで複数のシート印刷設定 1 2022/09/07 12:03
- その他(Microsoft Office) エクセル VBAについて 2 2022/09/21 22:21
- Excel(エクセル) エクセルVBA 複数行にまたがっている選択を判定するには 2 2023/05/21 21:54
- Windows 8 動画の再生とタイトルの変更方法を教えてください。 3 2022/08/01 14:51
- Excel(エクセル) エクセルのマクロについて教えてください。 7 2023/01/13 13:33
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
知恵袋の削除基準とても曖昧で...
-
削除されるの前提で質問するこ...
-
Facebookメッセンジャーの不具合
-
VBA:Openステートメントで開い...
-
喧嘩をしてLINE削除され、 また...
-
指定した文字があった場合、そ...
-
LINEのホームのベルマークにあ...
-
インスタグラムのギャラリーの...
-
インスタアカウント、前の携帯...
-
エクセルVBAで行削除時にエラー...
-
Yahooフリマってどれくらい時間...
-
DELETE文とTRUNCATE文の違いに...
-
ORA-14452について
-
エクセルVBA 指定したセルにも...
-
【ExcelVBA】指定のシート以外...
-
マクロで特定の行まで削除する...
-
アクセスにおいて間違って削除...
-
ダブルクォーテーションの削除...
-
メーリングリストから特定の人...
-
Mac iPhoneの連絡帳の大量のリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
指定した文字があった場合、そ...
-
vba 削除
-
VBA:Openステートメントで開い...
-
エクセルで住所の混在する「丁...
-
もう関わりたくない人がいたらL...
-
ハメ撮りが流出したら
-
今日の日付が過ぎたらその行を...
-
喧嘩をしてLINE削除され、 また...
-
エクセルVBAで行削除時にエラー...
-
外付けSSDのデータを改ざんされ...
-
Facebookメッセンジャーの不具合
-
lineスタンプの使用した使用履...
-
この質問サイトはどうしてヤフ...
-
アクセスにおいて間違って削除...
-
女友達にLINEしたら、既読スル...
-
ダブルクォーテーションの削除...
-
すべてやりきった、大満足を意...
-
VBA IF文でORを使ったとき後ろ...
-
(Access)複数条件の重複デー...
-
回答のついた質問を削除すると...
おすすめ情報