- ベストアンサー
エクセルVBAでUserInterfaceOnly:=Trueが効かない?!
- 以下のコードを実行すると、実行時エラー1004となります。
- Valueプロパティは設定できるのにIDプロパティが設定できないのはどうしてでしょうか?
- 一旦シートをUnprotectしてから再度Protectすること以外の対処法がありますか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
最近RangeのIDプロパティに関する質問が相次ぐ。 しかし解説書はもちろん、WEBでも情報が少なく、良くわからない点がある。 下記は回答といえるか判らないが、やってみたことで報告します。 まず、Protectに関して http://www.moug.net/tech/exvba/0040054.htm をよく読みました。 >引数UserInterfaceOnlyにTrueを指定していますので、マクロからの変更は可能です。 とありますが、マクロからの変更出来る事項にも制約が有るのでは。 エクセルがそうしているとしか考えられない。ユーザーには(一番主要なプロパティの)Valueなどだけ変更を出来るようにしているのではないですか。 そしてVBAでも何でもできるわけではない。値やセルの書式は設定できるが。 (1)確かにエラーが出ますね (2).IDの右辺を数字・文字列や””にしてもエラーが出ます (3)セルの他のプロパティは設定は出来たり出来なかったりでした。 書式はOK Sub test01() With ActiveSheet .Protect Password:="merlion", UserInterfaceOnly:=True .Range("A1").Value = 999 .Range("a1").Interior.ColorIndex = 6 .Range("A1").ID = 33 End With End Sub ーー 行高はOK、列幅もOK Sub test08() With ActiveSheet .Protect Password:="mer", UserInterfaceOnly:=True .Range("A1").Value = 222 .Range("a1").Interior.ColorIndex = 6 .Range("A1").RowHeight = 60 .Range("A1").ColumnWidth = 200 End With End Sub ーーー 罫線はOK Sub test11() With ActiveSheet .Protect Password:="mer", UserInterfaceOnly:=True .Range("A1").Value = 222 .Range("a1").Interior.ColorIndex = 6 .Range("A1").RowHeight = 60 .Range("A1").ColumnWidth = 200 .Range("A1").BorderAround LineStyle:=xlContinuous .Range("A1").BorderAround Weight:=xlThick End With End Sub ーーー コメントはダメ。 Sub test01() With ActiveSheet .Protect Password:="mer", UserInterfaceOnly:=True .Range("A1").Value = 111 .Range("a1").Interior.ColorIndex = 14 '.Range("A1").ID = 33 .Range("A1").AddComment .Range("A1").Comment.Text Text:="aaa" End With End Sub ーーー 入力規則はダメ。 Sub test05() With ActiveSheet '.Protect Password:="mer", UserInterfaceOnly:=True .Range("A1").Value = 111 .Range("a1").Interior.ColorIndex = 14 With Range("A1").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="a,b,c,d" End With End With End Sub ならうまく行くが.Protectを生かすとエラー。 ーー ただコメントや入力規則はオブジェクト系(Addする)ものなので セルのプロパティであるかないかも良くわからないが。 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_070_10.html などに難しいことが書いてある。
お礼
さっそくありがとうございます。 コメントや入力規則もUserInterfaceOnly:=True が効かないんですね、いまやってみて確認しました。 UserInterfaceOnly:=True は万能ではなかったんですね・・・・。