0

B列とC列の値がゼロの行を非表示にします。コードは機能しますが、アクティブなワークシートでのみ機能します。ブック内のすべてのワークシートをループするようにします。どんな助けでも大歓迎です

Private Sub CommandButton1_Click()
Dim M As Long, LastRow As Long
Dim ws As worksheet

For Each ws In ActiveWorkbook.Worksheets
LastRow = ws.Range("E65536").End(xlUp).Row
For M = LastRow To 7 Step -1
If Range("B" & M).Value = 0 And Range("C" & M).Value = 0 Then
Range("B" & M).EntireRow.Hidden = True
End If
Next M
Next ws
End Sub
4

3 に答える 3

0

シートをアクティブにします。問題は、Rangeが現在アクティブなシートで機能していることです。wsを使用する場合。範囲外または以下のようなワークシートをアクティブにします。

For Each ws In ActiveWorkbook.Worksheets

追加

ws.Activate
于 2013-02-01T20:39:24.090 に答える
0

私は主題についてこれを見つけました、私はそれが役立つことを願っています:ExtendOffice

Sub Hide_rows()
Dim LastRow As Long
Dim Rng As Range
LastRow = Range("A65536").End(xlUp).Row '
Set Rng = Range("A1:A" & LastRow) '
Application.ScreenUpdating = False
For Each cell In Rng
If cell.Value = "0" Then
cell.EntireRow.Hidden = True
End If
Next cell
Application.ScreenUpdating = True
End Sub
于 2013-02-01T20:39:28.957 に答える
0

次のように、範囲をワークシートのメンバーとして指定する必要があります。

Private Sub CommandButton1_Click()
   Dim M As Long, LastRow As Long
   Dim ws As worksheet

   For Each ws In ActiveWorkbook.Worksheets
       LastRow = ws.Range("E65536").End(xlUp).Row
       For M = LastRow To 7 Step -1
           ' Notice how 'ws' has been added before range
           If ws.Range("B" & M).Value = 0 And ws.Range("C" & M).Value = 0 Then
               ws.Range("B" & M).EntireRow.Hidden = True
           End If
       Next M
   Next ws
 End Sub
于 2013-02-01T20:39:31.090 に答える