我需要一个宏来隐藏同一选项卡中两个不同表中的空行。问题是下面提到的第一个宏在第二个选项卡(称为服务)中起作用,但在第三个选项卡(称为第三方)中不起作用。每个选项卡中的两个宏都分配给按钮(每个选项卡上一个)。最重要的是,相同的宏(下面提到的第一个宏-没有循环的较长的宏)曾经在这个选项卡中工作,但由于某种原因突然停止工作,所以我真的需要知道为什么它停止工作,以防止它在未来发生,以及找出如何修复下面提到的两个宏。
Sub HideRowsInThirdPartyTabTemp()
Call TurnOffFunctions
If Sheets("THIRD-PARTY").Rows("8:23") = " " Then
Range("8:23").Rows.Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B36") = 0 Then
Range("29:48").Rows.Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B57") = 0 Then
Range("50:69").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B78") = 0 Then
Range("71:90").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B99") = 0 Then
Range("92:111").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B120") = 0 Then
Range("113:132").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B141") = 0 Then
Range("134:153").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B162") = 0 Then
Range("155:174").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B183") = 0 Then
Range("176:195").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B204") = 0 Then
Range("197:216").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B225") = 0 Then
Range("218:237").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B246") = 0 Then
Range("239:258").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B267") = 0 Then
Range("260:279").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B288") = 0 Then
Range("281:300").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B309") = 0 Then
Range("302:321").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B330") = 0 Then
Range("323:342").Hidden = True
End If
If Sheets("THIRD-PARTY").Range("B351") = 0 Then
Range("344:363").Hidden = True
End If
Call TurnOnFunctions
End Sub上面的宏是一直在工作的宏,并且仍然在不同的选项卡中工作。我也尝试了下面的宏,因为我试图使用更多的循环。然而,这个宏有它自己的问题。它只隐藏第二个表(在第三方选项卡中)中的空白行,而不隐藏第一个表(在第三方选项卡中)中的空行。诚然,我刚开始使用VBA,但我不明白为什么它可以在工作簿的一个部分工作,而不能在另一个部分工作。起初,我认为B8:B23 (如果第三方标签中的第一个表为空,则隐藏的行)不起作用,因为这些单元格是合并的,但我在取消合并它们时遇到了同样的问题。不确定它是否会影响它,但第一个表格中的单元格(在第三方选项卡中)确实引用了第二个表格中的单元格(也在第三方选项卡中,B8:B23中的每个单元格对第二个表格中的每个相应部分求和。
Sub HideRowsInThirdPartyTabDim()
Call TurnOffFunctions
Dim r As Range, c As Range
Set r = Range("B8:B23,C37:C56,C58:C77,C79:C98,C100:C119,C121:C140,C142:C161,C163:C182,C184:C203,C205:C224,C226:C245, C247:C266,C268:C287,C289:C308,C310:C329,C331:C350,C352:C371")
Application.ScreenUpdating = False
For Each c In r
If Len(c.Text) = 0 Then
c.EntireRow.Hidden = True
Else
c.EntireRow.Hidden = False
End If
Next c
Application.ScreenUpdating = True
Call TurnOnFunctions
End Sub发布于 2019-08-09 22:02:22
您的非限定Range("num:num").Hidden = True总是隐式地在ActiveSheet上工作。
将所有代码包装在这样的With语句中,它应该可以很好地工作
Sub HideRowsInThirdPartyTabTemp()
TurnOffFunctions
With Sheets("THIRD-PARTY")
If .Rows("8:23") = " " Then
.Range("8:23").Rows.Hidden = True
End If
If .Range("B36").Value = 0 Then
.Range("29:48").Rows.Hidden = True
End If
If .Range("B57").Value = 0 Then
.Range("50:69").Hidden = True
End If
'etc
End With
End Sub请注意,在Range()方法调用之前有一个.,它告诉编译器这属于您正在做的任何事情,With。
注意:一致的缩进对阅读代码非常有帮助。
注2:没有必要使用Call -它已经被弃用了很多年了,现在仍然支持它,所以运行还没有被编辑的旧代码的人不必编辑它,就可以在新版本的VBA中运行它。
注意3:我在.Range()语句的末尾添加了.Value,以明确表示您正在查看的内容。当以这种方式使用时,.Value是.Range()的默认属性,但最好是直言不讳。
https://stackoverflow.com/questions/57431522
复制相似问题