
閲覧頂きありがとうございます。
現在複数の表に対してチェックボックスをクリックするとセルがロックするマクロを組んでおります。
しかし、複数のチェックボックスをクリックすると”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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) セルのロックのメッセージが表示されないようにするには 2 2022/08/06 21:12
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBAについて教えてください 4 2022/11/10 12:44
- Excel(エクセル) Formulaプロパティーを使ってセルに数式を組んだのですが簡潔にしたい。 3 2022/08/21 20:51
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
このQ&Aを見た人はこんなQ&Aも見ています
-
ショボ短歌会
ひどい短歌を詠んでください。
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
EXCELマクロ 保護されているシートのダイアログを表示させない方法
Visual Basic(VBA)
-
-
4
UserForm1.Showでエラーになります。
工学
-
5
ブック名、シート名を他のモジュールからも参照可能にする方法
Access(アクセス)
-
6
エクセルのチェックボックスを保護対象から外すには
Windows Vista・XP
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
9
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
10
Enterキーでマクロを起動さす。
その他(ソフトウェア)
-
11
エクセルマクロで、別のブックが開いているかを判定したいのですが。
その他(Microsoft Office)
-
12
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
13
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
14
On ErrorでエラーNoが0
Visual Basic(VBA)
-
15
【VBAユーザーフォームで閉じるボタンを表示したくない】
Visual Basic(VBA)
-
16
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
17
エクセルVBAでオプションボタンを無効にする方法
Excel(エクセル)
-
18
エクセルでシート保護をかけるとチェックボックスが操作できない
Excel(エクセル)
-
19
InputBoxの入力値を半角数字のみと限定する方法
Excel(エクセル)
-
20
エクセルVBAでTargetのセルに設定された「名前の定義」の取得方法は?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelでSUBTOTAL関数を設定した...
-
EXCELで、結合されたセルに連続...
-
エクセル ボタンを押すとセルの...
-
エクセルでチェックボックスを...
-
エクセルで片方のセルに入力し...
-
Excel セルを結合したものを抽...
-
【EXCEL】条件に合致するセルの...
-
セルを結合した場合の関数(COU...
-
エクセル 結合セル内に空白なら...
-
Excel2007 セルの削除について
-
VBAで結合したセルがクリアでき...
-
EXCEL セル結合したセルを参照...
-
Excel 離れたセルへの連続デー...
-
【Excel VBA】串刺し集計について
-
エクセルでセルをクリックして“...
-
VBAで困っています。
-
Excelでnullになるような式のセ...
-
EXCEL VBAでたくさんのURLの一...
-
エクセルでたくさんのセルを小...
-
エクセル:自動保存の方法:she...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelでSUBTOTAL関数を設定した...
-
エクセル ボタンを押すとセルの...
-
EXCELで、結合されたセルに連続...
-
セルを結合した場合の関数(COU...
-
エクセルでチェックボックスを...
-
エクセルで片方のセルに入力し...
-
VBAで結合したセルがクリアでき...
-
Excel 離れたセルへの連続デー...
-
Excel セルを結合したものを抽...
-
セルの値を取得してSQL文に組み...
-
エクセル 結合セル内に空白なら...
-
エクセルでたくさんのセルを小...
-
Excelのカウントアップボタンに...
-
エクセルで作業した日の日付を残す
-
【EXCEL】条件に合致するセルの...
-
エクセルでセルをクリックして“...
-
EXCEL セル結合したセルを参照...
-
VBAで困っています。
-
Excelの表に自動でナンバリング...
-
曜日を判定して、曜日ごとに特...
おすすめ情報