workbook_open()一般ユーザーがどのワークシートでも変更できないように、最初にワークブックの保護を解除し、すべてのマクロを実行してから、ワークブックを再度保護する方法はありますか? 一般ユーザーが何も変更できないようにしたいのですが、マクロが自動更新と計算を実行できるようにします。
助言がありますか?これは実現可能ですか?
あなたが探しているのはWorksheet.Protect方法だと思います。
イベントの開始時に、次のWorkbook_Openコードを配置します。
ThisWorkbook.Sheets("SheetYouWantToUnprotect").Unprotect _ Password:="TheSheetPassword"
次に、Workbook_Openイベント コードの最後にシートを再度保護する必要があるため、次のコードを配置します。
ThisWorkbook.Sheets("SheetYouWantToProtect").Protect _
Password:="SheetPassword"
もちろん、複数のシートの保護を解除する必要がある場合は、複数のシートでこれを行うことができます。各シートに同じパスワードが設定されている場合は、Openイベント の最初に単純なループを配置します。
Dim sht as Worksheet
For Each sht in Thisworkbook.Sheets
sht.Unprotect Password:="YourPassword"
Next sht
コードの最後で、同じループを使用してシートを保護できます。変更.Unprotectするだけ.Protectです。
または、多くの異なるパスワードがある場合 (すべてを 1 つのパスワードに変更することをお勧めします)、必要なシートの保護を解除するのに必要な数のコードの最初の行のインスタンスを配置できます。
注:このメソッドには、ここでは取り上げなかったオプションの引数が他にも多数ありますが、完全なリストはこちらで確認できます。.Protect
編集: メソッドの詳細は次のとおりです。Unprotect
はい、できます
Private Sub Workbook_Open()
Dim WS As Worksheet
For Each WS In ThisWorkbook.Sheets
WS.Unprotect Password:="YourPassword"
WS.Protect Password:="YourPassword", UserInterfaceOnly:=True
Next WS
End Sub
これUserInterfaceOnly:=Trueにより、VBA はワークシートの任意の部分を操作できますが、一般ユーザーは「ロックされていない」セルのみを操作できます。