首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相同的宏在一个excel电子表格中工作,但不能在另一个电子表格中工作(用于工作)

相同的宏在一个excel电子表格中工作,但不能在另一个电子表格中工作(用于工作)
EN

Stack Overflow用户
提问于 2019-08-09 21:50:13
回答 1查看 519关注 0票数 0

我需要一个宏来隐藏同一选项卡中两个不同表中的空行。问题是下面提到的第一个宏在第二个选项卡(称为服务)中起作用,但在第三个选项卡(称为第三方)中不起作用。每个选项卡中的两个宏都分配给按钮(每个选项卡上一个)。最重要的是,相同的宏(下面提到的第一个宏-没有循环的较长的宏)曾经在这个选项卡中工作,但由于某种原因突然停止工作,所以我真的需要知道为什么它停止工作,以防止它在未来发生,以及找出如何修复下面提到的两个宏。

代码语言:javascript
复制
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中的每个单元格对第二个表格中的每个相应部分求和。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-08-09 22:02:22

您的非限定Range("num:num").Hidden = True总是隐式地在ActiveSheet上工作。

将所有代码包装在这样的With语句中,它应该可以很好地工作

代码语言:javascript
复制
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()的默认属性,但最好是直言不讳。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57431522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档