Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Excel中的每个工作表中隐藏零行_Excel_For Loop_Foreach_Show Hide_Vba - Fatal编程技术网

如何在Excel中的每个工作表中隐藏零行

如何在Excel中的每个工作表中隐藏零行,excel,for-loop,foreach,show-hide,vba,Excel,For Loop,Foreach,Show Hide,Vba,我想隐藏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

我想隐藏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

激活工作表。问题是范围正在从当前活动工作表中移出。如果您使用ws。输入范围或激活工作表,如下所示

For Each ws In ActiveWorkbook.Worksheets


我发现这是关于这个主题的,我希望它有帮助:


您需要将范围指定为工作表的成员,如下所示:

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

1.
在整个工作簿的两列中隐藏零值行的目的是什么<代码>2。工作簿中有多少页<代码>3。您使用的Excel版本是什么?欢迎使用堆栈溢出!我开始评论,然后意识到我误解了你的意图。bonCodigo提出了很好的问题。这将杀死工作簿…遍历整个工作簿中的每个单元格…漫长的旅程…使用
.Activate
方法通常是不好的做法。有很多更快的方法来完成一项涉及
.Activate
@Brad的任务,这取决于开发人员。因此,我还说他可以添加ws-workbook对象来引用范围。也许,但是
。选择
。激活
几乎可以保证,与不主动改变光标位置的等效方法相比,您的程序运行速度要慢得多。即使关闭了
应用程序。屏幕更新
。你是对的,这取决于开发人员,但真的…为什么?他们想使用的是开发人员的选择,为什么…因为他们编写的不是你。你所能做的就是给他们提供信息,让他们决定什么最适合他们的项目。将ws添加到范围中效果很好,程序运行很快。谢谢你的帮助
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
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