[[20230324085230]] 『マクロにて行の表示・非表示を行いたい』(ともちん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロにて行の表示・非表示を行いたい』(ともちん)

1・D4:F12、D14:AJ67及びD68:F88のセルの書式設定より保護タブのロックのチェックを外しています。
2・シートの保護にてロックされていないセル範囲の選択以外のチェックを外して、シートの保護を行っています。
3・最後にブックの共有を行っています。

そこで下記のマクロを2つ組みました。

Sub Macro1()

    ActiveSheet.Unprotect
    Range("4:12,68:88").Select
    Range("A68").Activate
    Selection.EntireRow.Hidden = True
    Range("E14").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Sub Macro2()

    ActiveSheet.Unprotect
    Rows("4:12").Select
    Range("4:12,68:88").Select
    Range("A68").Activate
    Selection.EntireRow.Hidden = False
    Range("E4").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

マクロを実行すると実行時エラー1004となります。
どこを直せばいいですか?

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 [シートの保護]を設定する際に[行の書式設定]も許可してあげて、
 マクロは↓だけにしてしまえば良いと思います。

    Sub Macro1()
        Range("4:12,68:88").EntireRow.Hidden = True
    End Sub
    Sub Macro2()
        Range("4:12,68:88").EntireRow.Hidden = False
    End Sub

(白茶) 2023/03/24(金) 13:17:52


解決済なので放置しているのかもしれませんが一応。

■1
発想が↓のようなことになっているのではないでしょうか?

 シート保護されていると、行の表示/再表示ができない
                   ↓
 一時的に保護を解除して、操作したら再度保護すればよい

実は、Protectメソッドには【UserInterfaceOnly】という引数があり、これをTrueにするとユーザーの操作は保護されるけどマクロからの操作は許容されるという設定が可能です。
ただし、この設定はブックを開きなおすとただの保護に戻ってしまうので、↓のようにブックを開くたびに【UserInterfaceOnly】をTrueにしなおすようにしておくとよいです。

【ThisWorkbook】モジュールに記述

    Private Sub Workbook_Open()
        With ThisWorkbook.Worksheets(1)
            .Unprotect
            .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
        End With
    End Sub

■2
白茶さんからアドバイスがあるところですが、表示/非表示を切り替えるだけなら1つで済みます。

    Sub 切り替えタイプ()
        With ThisWorkbook.Worksheets(1)
            .Range("4:12,68:88").EntireRow.Hidden = Not .Range("4:12,68:88").EntireRow.Hidden
        End With
    End Sub

(もこな2) 2023/03/27(月) 13:02:02


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.