プロが教えるわが家の防犯対策術!

ExcelVBAについて2点質問です。

画像のようにコンボボックスのリストを変更すると、
C列にフィルターがかかる仕様です。

①シートには保護がかかっており、マクロ実行の際に
ActiveSheet.Protect UserInterfaceOnly:=True
で保護した状態でも実行できるようにしているのですが、
シートの保護を解除してから実行してくださいというエラーがでます。
他のマクロもあり、他ではシートの保護に関するエラーが出ずに実行されるのですが
どうして実行されないのでしょうか。
※シートの保護を解除すると思った結果になります。
ボタンでの実行ではなく、コンボボックスの値が変更されると実行されるマクロでは
ActiveSheet.Protect UserInterfaceOnly:=True
が効かないなどあるのでしょうか。

②また現在はコンボボックスの値の月のみフィルターで表示されるようになっていますが、
コンボボックスで指定した月以降がすべて表示されるようにするにはどうしたらよいでしょうか。

▼現在のコード

Sub ドロップ1_Change()
ActiveSheet.Protect UserInterfaceOnly:=True
With Worksheets("sheet1").Range("A2").CurrentRegion
.AutoFilter
.AutoFilter 3, Worksheets("sheet1").Range("H3")
Cancel = True
End With
End Sub

「ExcelVBA ドロップボックスで月を」の質問画像

質問者からの補足コメント

  • ご回答いただきありがとうございます。

    >コントロールの書式設定画面から [コントロール] タブをクリックし、[リンクするセル] にセル名を入力して [OK] をクリックします。
    現在この方法で[G1]にリンクするセルを設定しています。
    これを指定してはいけないということでしょうか。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/12/19 09:11

A 回答 (3件)

[G1]にリンクするセルを設定しないで


VBA で書き換えるなら

ActiveSheet.Range("G1") = ActiveSheet.DropDowns(1).Value

とか。
    • good
    • 1

>これを指定してはいけないということでしょうか。



シートの保護をしたままではそういうことになります。
試しに「リンクするセル」を削除してテストしてみてください。
    • good
    • 0

[リンクするセル] が設定されているとダメみたいですね。


ユーザーの操作で リンクするセル を書き換えた、
ということになるのでしょう。

以下を行った、ということでしょうか。
コントロールの書式設定画面から [コントロール] タブをクリックし、[リンクするセル] にセル名を入力して [OK] をクリックします。
この回答への補足あり
    • good
    • 0

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


このQ&Aを見た人がよく見るQ&A