通常、ペインのフリーズを解除するコードは次のとおりです。
ActiveWindow.FreezePanes = False
しかし、WorkbookタイプのsourceBookとStringタイプのsheetNameがあるとします。例えば
sourceBook.sheets(sheetName)
ActiveWindowなどを呼び出さずに、そのブックのシートのペインのフリーズを解除するにはどうすればよいですか?
これにより、特定のブックのすべてのウィンドウのすべてのシートからFreezePanesが削除されます。また、コードを実行する前にアクティブだったのと同じワークシートがアクティブになっていることも確認されます。
Dim w As Window
Dim activews As Worksheet, ws As Worksheet
For Each w In sourceBook.Windows
w.Activate
If activews Is Nothing Then
Set activews = w.ActiveSheet
End If
For Each wsv In w.SheetViews
wsv.Sheet.Activate
w.FreezePanes = False
Next
activews.Activate
set activews = nothing
Next
Rickが示したように、ウィンドウをアクティブ化せずにペインのフリーズを解除することはできません。ただし、を呼び出す必要はありませんActiveWindow
。
残念ながら、フリーズペインはウィンドウオブジェクトのメソッドであり、それを適用するシートはアクティブシートである必要があります。これは、アクティブなウィンドウのペインのみをフリーズするセルを選択する必要があることを意味します。
シートのアクティブ化イベントにコードを追加します(たとえば、これはSheet1の下のコードです)
Option Explicit
Private Sub Worksheet_Activate()
ActiveWindow.FreezePanes = False
End Sub