2017-10-02 4 views
1

selectを使用せずに任意の量のワークシートのトップx行をフリーズする方法はありますか、個々のシートをアクティブ化せずにvba経由で行をフリーズする

This answer

With ActiveWindow 
    If .FreezePanes Then .FreezePanes = False 
    .SplitColumn = 0 
    .SplitRow = 1 
    .FreezePanes = True 
End With 

を使用することを提案し、マクロを記録するRows("4:4").Select: ActiveWindow.FreezePanes = Trueを用いることが提案されているが、私は私のワークブック内のすべてのシートを活性化に依存しないソリューションを好むだろう。

I.e.何かのように

Sub FreezeTopXPanes(x As Long) 
    Dim ws As Worksheet 

    For Each ws in ThisWorkbook.Worksheets 
    ' Freeze top x rows 
    Next ws 
End Sub 

これを実行する方法はありますか、私は他の質問の解決策に固執していますか?

+1

様々なシートを有効にしなければ可能ではないと思います。ドキュメンテーションは 'FreezePanes'は' Sheet'ではなく 'Window'オブジェクトを必要とすると述べています。また、 'FreezePanes'は、' ActiveCell'の位置を使用して、いくつの行と列をフリーズするかを調べます。 –

+0

リンクされた答えをもう少し引用して、アクティブセル/セレクトを使用しないメソッドが少なくとも含まれているので、正しいものにリンクしていることをダブルチェックしてください。関連する情報を含めるように質問を更新しましたが、わかるように、このソリューションはactivewindowの使用にも依存しています。 @PatrickHonorez – eirikdaude

答えて

0

これは問題です。 @Patrickが述べたように、フリーズペインメソッドはアクティブウィンドウでしか動作しないので、これはむしろ不可能です。もっと見る詳細

here.私は最善の方法は、一度に、または特定の1のために、すべてのシートのために、別の手順を使用することであると思う:

Sub Freeze_wsh() 
Dim Ws As Worksheet 
Application.ScreenUpdating = False 
For Each Ws In Application.ActiveWorkbook.Worksheets 
    Ws.Activate 
    With Application.ActiveWindow 
     .FreezePanes = True 
     .ScrollRow = 1 
     .ScrollColumn = 1 
    End With 
Next 
Application.ScreenUpdating = True 
End Sub 

それとも、特定のシートを参照するための変数を追加することができます

Sub Freeze_wsh(x as Integer) 
Dim Ws As Worksheet 
Application.ScreenUpdating = False 
set Ws = ActiveWorkbook.Worksheets(x) 
    Ws.Activate 
    With Application.ActiveWindow 
     .FreezePanes = True 
     .ScrollRow = 1 
     .ScrollColumn = 1 
    End With 
Next 
Application.ScreenUpdating = True 
End Sub 
関連する問題