
閲覧頂きありがとうございます。
現在複数の表に対してチェックボックスをクリックするとセルがロックするマクロを組んでおります。
しかし、複数のチェックボックスをクリックすると”RangeクラスのLockedプロパティを設定できません。”と出てきます。
プロシージャもわけて書いております。
下記にコードを記します。
よろしければ解決策を教えて頂けないでしょうか?
よろしくお願いします。
Private Sub CheckBox1_Change()
If CheckBox1.Value = True Then
Range("C13").MergeArea.Locked = True
Range("C17").MergeArea.Locked = True
Range("I14").MergeArea.Locked = True
Range("I15:I18").Locked = True
Range("I19").MergeArea.Locked = True
Range("K19").Locked = True
Range("I20").Locked = True
Range("N16").MergeArea.Locked = True
Range("S16").MergeArea.Locked = True
Range("V16").MergeArea.Locked = True
Range("X16").MergeArea.Locked = True
Range("Z16").MergeArea.Locked = True
Range("AE14").Locked = True
Range("AG14").Locked = True
Range("AD15").Locked = True
Range("AF15").Locked = True
Range("AH15").Locked = True
Range("AE17").Locked = True
Range("AG17").Locked = True
Range("AF19").Locked = True
Range("AH19").Locked = True
Range("AJ16").MergeArea.Locked = True
Range("AL16").MergeArea.Locked = True
ActiveSheet.Protect
Else
ActiveSheet.Unprotect
Range("C13").MergeArea.Locked = False
Range("C17").MergeArea.Locked = False
Range("I14").MergeArea.Locked = False
Range("I15:I18").Locked = False
Range("I19").MergeArea.Locked = False
Range("K19").Locked = False
Range("I20").Locked = False
Range("N16").MergeArea.Locked = False
Range("S16").MergeArea.Locked = False
Range("V16").MergeArea.Locked = False
Range("X16").MergeArea.Locked = False
Range("Z16").MergeArea.Locked = False
Range("AE14").Locked = False
Range("AG14").Locked = False
Range("AD15").Locked = False
Range("AF15").Locked = False
Range("AH15").Locked = False
Range("AE17").Locked = False
Range("AG17").Locked = False
Range("AF19").Locked = False
Range("AH19").Locked = False
Range("AJ16").MergeArea.Locked = False
Range("AL16").MergeArea.Locked = False
End If
End Sub
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
皆さんの指摘を総合すると、こんな感じになるかな。
For Eachについては、おいおい勉強してください。
Private Sub CheckBox1_Click()
Dim r As Range
ActiveSheet.Protect UserInterfaceOnly:=True
For Each r In Range("LockArea1")
r.MergeArea.Locked = CheckBox1.Value
Next r
End Sub
No.3
- 回答日時:
>複数のチェックボックスをクリックすると”RangeクラスのLockedプロパティを設定できません。
このエラー自体は、ひとつは、保護状態でセルのプロパティを変更しようとした場合であり、なおかつ、マクロの書く場所が、Active Xコントロールをお使いのハズなのに、シートモジュールを使っていないからです。(別途、サブルーチンを標準モジュールに備えている場合はこの限りではありませんが、ご質問に書かれたコードを対象にした場合)
しかし、コードを読んだ感じとして、ロジックが変な気がしますね。
ActiveSheet.Protectで、セルのロック、ActiveSheet.Unprotect で、セルのロックを解除では矛盾しているように思うのですが……。そこらはどういう考えなのかなと疑問に思います。
プロテクトをしてセルをロックするというのは、しなくてもよいはずなのです。
プロテクトした状態では、書き込めないのですから。
それに、セルのロックを外すだけなら、1回だけで十分だと思います。
>よろしければ解決策を教えて頂けないでしょうか?
解決というよりも、本来の目的は、そのブックのユーザーの入力を拒否するということではないでしょうか。だとしたら、それは、セルのロックとは違い、入力規則にするか、セルの入力にパスワードを設けるのか、いくつか方法はあるはずです。
むろん、チェックボックスで、書き込み可能にしたり、書き込み不能にするなら、シートのプロテクトを外して、セルのロック、セルのロック外しをして、最後は必ず、シートはプロテクト状態にしなければなりませんね。そのときに、No.2様、ご指摘のようにシートのモードが、UserInterFaceOnly モードでマクロの利用可になるから、1回、そのモードでプロテクトしておけば、保存するまでは、Protect, Unprotect の命令が不要になるということです。
No.2
- 回答日時:
こんにちは
>複数のチェックボックスをクリックすると~~
ご提示のものは一つだけですが、同様で対象セル範囲の異なるものが複数存在するということですよね?
No1様がご指摘の状態の他にも、シートに保護がかかった状態で、セルのLockedプロパティを変更しようとしても同様のエラーが出ます。
一方で、ご提示のコードはそれぞれ単独で保護の状態を変えていますので、複数のプロシージャが実行されるような場合、その実行される時の状態がどちらになっているのかは不定ということになります。
ですので、処理の最初に必ず、
ActiveSheet.Unprotect
をいれるとエラーがでなくなったりはしませんか?
とは言っても、それぞれ異なるセル(群)のロック状態を制御しているのだと想像しますので、シートの保護が外れた状態は基本的にないものとして考えた方が良いのではないでしょうか。
つまり、マクロから操作する時にだけ、最初に保護を解除、最後に必ず保護を設定という手順になるかと思います。
このような手順が面倒なら、保護をかける際に
ActiveSheet.Protect UserInterfaceOnly:=True
としておけば、マクロからの変更に関しては保護が無い時と同様になりますので、保護の状態を気にしなくても良くなります。
以降は、ご質問とは関係のない、いらぬおせっかいになりますが…
ご提示のコードのセル範囲の列挙はなんとかしたいですね、
(チェックボックスが複数あるならなおさらです)
セル範囲のセットは固定だと想像しますので、例えば、名前の定義を利用して、あらかじめセル群に名前を付けておけば汎用のルーチンをひとつ作成しておくことで、
それぞれのイベント処理は
Private Sub CheckBox1_Change()
Call LockProcedure( "LockArea1", CheckBox1.Value )
End Sub
のような要領で済ませられるので、簡単にできると思います。
一方、汎用ルーチン側で名前の定義からその対象レンジを取得するには
ThisWorkbook.Names.Item(areaName).RefersToRange
で可能です。
この範囲に対して同じ処理を行う記述にしておけば良いので、対象範囲に含まれるセルが多い程、コードの記述は大幅に短縮できるものと思います。
No.1
- 回答日時:
>”RangeクラスのLockedプロパティを設定できません。
”と出てきます。コード(記述)は見ていませんが、このエラーは、結合セルを保護対象から外す場合にmergeareaがなければ出ることが多いとか。
http://www.navio.ne.jp/navio/29012.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCELマクロ 保護されているシートのダイアログを表示させない方法
Visual Basic(VBA)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
-
4
Excelのシートを保護してオプションボタンの選択のみ可能にしたい
Excel(エクセル)
-
5
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
6
エクセルのチェックボックスを保護対象から外すには
Windows Vista・XP
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
エクセルVBAでオプションボタンを無効にする方法
Excel(エクセル)
-
9
エクセルマクロで、別のブックが開いているかを判定したいのですが。
その他(Microsoft Office)
-
10
Calculateイベントでセルを指定したい
Word(ワード)
-
11
Excel 条件によって入力禁止にする
Excel(エクセル)
-
12
マクロ 実行エラー1004
Excel(エクセル)
-
13
「Cancel = True」とはどういう意味でし
Word(ワード)
-
14
エクセル マクロ名にブック名が付いた場合の修正方法
Excel(エクセル)
-
15
エクセルの保護で、列の表示や非表示が加納にするには
Excel(エクセル)
-
16
別シートのマクロを実行する方法
Excel(エクセル)
-
17
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
18
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
19
お助けください!VBAのファイル名エラーについて
Visual Basic(VBA)
-
20
【マクロ】名前を保存する際に、同じファイルがあった場合に、メッセージを表示
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelでSUBTOTAL関数を設定した...
-
EXCELで、結合されたセルに連続...
-
エクセルでチェックボックスを...
-
Excel 離れたセルへの連続デー...
-
エクセルでたくさんのセルを小...
-
エクセル ボタンを押すとセルの...
-
セルを結合した場合の関数(COU...
-
エクセルで片方のセルに入力し...
-
VBAで結合したセルがクリアでき...
-
曜日を判定して、曜日ごとに特...
-
VBAで困っています。
-
【EXCEL】条件に合致するセルの...
-
「数式は隣接したセルを使用し...
-
EXCEL VBAでたくさんのURLの一...
-
Excelでnullになるような式のセ...
-
EXCEL VLOOKUP的コメント自動表示
-
結合セルのデータ消去でエラー...
-
セルの結合
-
EXCEL セル結合したセルを参照...
-
【Excel VBA】串刺し集計について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelでSUBTOTAL関数を設定した...
-
EXCELで、結合されたセルに連続...
-
エクセルでチェックボックスを...
-
エクセル ボタンを押すとセルの...
-
セルを結合した場合の関数(COU...
-
エクセルで片方のセルに入力し...
-
VBAで結合したセルがクリアでき...
-
Excel 離れたセルへの連続デー...
-
エクセルでたくさんのセルを小...
-
セルの値を取得してSQL文に組み...
-
Excel セルを結合したものを抽...
-
エクセル 結合セル内に空白なら...
-
エクセルでセルをクリックして“...
-
「数式は隣接したセルを使用し...
-
EXCEL VBAでたくさんのURLの一...
-
エクセルで作業した日の日付を残す
-
VBAで困っています。
-
結合セルのデータ消去でエラー...
-
【EXCEL】条件に合致するセルの...
-
セルの結合
おすすめ情報