2017-08-30 5 views
0

VBAを使用してレポートを書式設定します。データが特定の行数を超える場合にのみ、上部ペインをフリーズします。

35個以上の行がある場合にのみ、ワークシート上にフリーズペインを適用します。 私は、データが1画面(35行を取っている)を超えている場合、フリーズペインを有効にする必要があることを示しています。それ以外の場合(35行未満のデータ)、フリーズペインは無効にする必要があります。

私は以下のコードをフリーズトップペインに使用しました。どのようにして行をチェックしてパートを行うことができますか?

new_book.Sheets("Report_").Range("A2").Select 
    With ActiveWindow 
     .SplitColumn = 0 
     .SplitRow = 1 
    End With 
    ActiveWindow.FreezePanes = True 

答えて

1

シンプル...最後の行を取得し、35を超えたらテストします。はいの場合は、ペインをフリーズします。

以下は、アクティブシート上で実行されます。あなたはこのためにはThisWorkbookWorkbook_SheetActivateイベントを使用することができます

Sub Test() 
Dim lastrow As Integer 
lastrow = Range("A" & Rows.Count).End(xlUp).Row 

If lastrow > 35 Then 
    Range("A2").Select 
    ActiveWindow.FreezePanes = True 
End If 

End Sub 
+0

ありがとうございます!私はちょうどそれを少し改変し、それが.END(xlUp) LASTROW =範囲( "A" &Rows.Count)整数として 薄暗いのLASTROWを.Row LASTROW> 35そして new_book.Sheets場合(worked- "報告書")。レンジ( "A2")。 ActiveWindow.FreezePanes = Trueの END IF – Indira

0

ワークシートを切り替えるたびに、それ以上の行が35あるかどうかを確認します。 Moreがあると、最初の行がフリーズします。これがあなたを助けることを願っています。

Private Sub Workbook_SheetActivate(ByVal Sh As Object) 

    Dim intLastRow As Integer 

    With Sh.UsedRange 
      intLastRow = .Rows(.Rows.Count).Row 
    End With 

    If intLastRow > 35 Then   
     Sh.Range("A2").Select 
     With ActiveWindow 
      .SplitColumn = 0 
      .SplitRow = 1 
     End With 
     ActiveWindow.FreezePanes = True 
    Else 
     Sh.Range("A2").Select 
     With ActiveWindow 
      .SplitColumn = 0 
      .SplitRow = 0 
     End With 
     ActiveWindow.FreezePanes = False 
    End If 
End Sub 
+0

おかげでのActiveWindow .SplitColumn = 0 .SplitRow = 1 端と を選択しますが、それは他の使用せずに働いていました。..したがって、Else条件を無視することがあります。 – Indira

+0

else条件が挿入されました。いくつかの行を削除すると、そのために35行未満であるため、フリーズペインを無効にします。 – Moosli

+0

@Indiraとこのソリューションの利点は、イベントを使用しているため、手作業でマクロを実行する必要はなく、すべてのシートで自動的に実行されるため、毎回コードを変更する必要はありませんワークブック。 – Moosli

関連する問題