Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(指定なし : 指定なし)
シート保護のままVBAを動かすには...
投稿日時: 19/09/04 17:49:47
投稿者: carter

下記のマクロを作成してみましたが上手く動きません。
 状況は、シートの保護をかけた状態だと、
 変更しようとしているセルは保護されているため、読み取り専用となっています。
 という内容が表示されます。下記のマクロで保護を解除せずに済む方法があれば
 何卒ご教授の程宜しくお願い致します。
  
   ActiveWindow.ScrollWorkbookTabs Position:=xlLast
    Sheets("各種フォーマット").Select
    ActiveWindow.SmallScroll Down:=-3
    Range("B19").Select
    Selection.Copy
    ActiveWindow.SmallScroll Down:=-15
    Range("C6:V6").Select
    ActiveSheet.Paste ←ここにエラーが出ます。

回答
投稿日時: 19/09/04 19:03:54
投稿者: simple

Sub test()
    With Sheets("各種フォーマット")
        .Protect UserInterfaceOnly:=True
    End With
End Sub
などとして処理実行すれば、
・ユーザーの手動での変更は保護されるが、
・マクロによる変更は許可される
ようにできます。(ネットなどで調べて見て下さい)
 
これがピッタリのような気が最初はしますが、
そのUserInterfaceOnly=Trueによる保護処理は永続的ではない、
つまり、閉じられると、UserInterfaceOnly=Trueの効果は無効になるので、
・Bookを開いたときなどに、
自動実行マクロで、その都度、UserInterfaceOnly=Trueによる保護処理
を実行する必要があります。
その点に注意が必要です。
マクロ無効で開かれることにも注意が必要かもしれません。
 
したがって、私は、そこに注意を向けるよりも、
「その都度、@保護解除、A処理、B再度保護 を実行する」のが
間違いないと思います。マクロに書いておけば、手間はかかりませんし、
ユーザーには影響は及びません。
 
-------------------
失礼ながら、
UserInterfaceOnly=Trueによる保護処理といったものに、
気を使うよりも、
Selectを使わないスタイルで書くことをマスターされるほうが
効果は大きいと思われます。
 
例えば、提示されたコードは
Sub test()
    With Sheets("各種フォーマット")
        .Range("B19").Copy .Range("C6:V6")
    End With
End Sub
などと Selectを使わずに書けます。

トピックに返信