【问题标题】:Macro to hide rows isn't hiding every single one隐藏行的宏不会隐藏每一行
【发布时间】:2019-12-04 08:47:39
【问题描述】:

我编写了两个宏,HideRowsInSOW() 和 HideRowsInSOW2()` 来隐藏同一个电子表格中两个表格中的任何空白单元格。每个单元格引用下一个电子表格“服务”上的相应单元格。有一行灰色是两个表中每个部分的标题,每个灰色行下方有 10 个白色行用于详细信息。

我的第一个宏成功隐藏了所有空的白色行,但没有隐藏灰色行。如果灰色单元格中没有值,我需要隐藏它,就像隐藏白色行一样。第二个不断使 Excel 崩溃。

    Sub HideRowsInSOW()
    For Each c In Range("B29:B706")
    If c.Value = "0" Then
    c.EntireRow.Hidden = True
    Else
    c.EntireRow.Hidden = False
    End If
    Next
    End Sub

Another macro I tried is the following (there is another similar macro for the rows in the second table). This macro was much worse, like I said, it keeps crashing Excel:

If Sheets("SOW").Range("B28") = " " Then
        Worksheets("SOW").Rows("28:48").Hidden = True
    Else
        Worksheets("SOW").Rows("28:48").Hidden = False
    End If
    If Sheets("SOW").Range("B49") = " " Then
        Worksheets("SOW").Rows("49:69").Hidden = True
    Else
        Worksheets("SOW").Rows("49:69").Hidden = False
    End If
    If Sheets("SOW").Range("B70") = " " Then
        Worksheets("SOW").Rows("70:90").Hidden = True
   Else
        Worksheets("SOW").Rows("70:90").Hidden = False
    End If
    If Sheets("SOW").Range("B91") = " " Then
        Worksheets("SOW").Rows("91:111").Hidden = True
    Else
        Worksheets("SOW").Rows("91:111").Hidden = False
    End If
    If Sheets("SOW").Range("B112") = " " Then
        Worksheets("SOW").Rows("112:132").Hidden = True
    Else
        Worksheets("SOW").Rows("112:132").Hidden = False
    End If
    If Sheets("SOW").Range("B133") = " " Then
        Worksheets("SOW").Rows("133:153").Hidden = True
    Else
        Worksheets("SOW").Rows("133:153").Hidden = False
    End If
    If Sheets("SOW").Range("B154") = " " Then
        Worksheets("SOW").Rows("154:174").Hidden = True
    Else
        Worksheets("SOW").Rows("154:174").Hidden = False
    End If
    If Sheets("SOW").Range("B175") = " " Then
        Worksheets("SOW").Rows("175:195").Hidden = True
    Else
        Worksheets("SOW").Rows("175:195").Hidden = False
    End If
    If Sheets("SOW").Range("B196") = " " Then
        Worksheets("SOW").Rows("196:216").Hidden = True
   Else
        Worksheets("SOW").Rows("196:216").Hidden = False
    End If
    If Sheets("SOW").Range("B217") = " " Then
        Worksheets("SOW").Rows("217:237").Hidden = True
   Else
         Worksheets("SOW").Rows("217:237").Hidden = False
    End If
    If Sheets("SOW").Range("B238") = " " Then
        Worksheets("SOW").Rows("238:258").Hidden = True
   Else
         Worksheets("SOW").Rows("238:258").Hidden = False
    End If
    If Sheets("SOW").Range("B259") = " " Then
        Worksheets("SOW").Rows("259:279").Hidden = True
   Else
         Worksheets("SOW").Rows("259:279").Hidden = False
    End If
    If Sheets("SOW").Range("B280") = " " Then
        Worksheets("SOW").Rows("280:300").Hidden = True
   Else
         Worksheets("SOW").Rows("280:300").Hidden = False
    End If
    If Sheets("SOW").Range("B301") = " " Then
        Worksheets("SOW").Rows("301:321").Hidden = True
   Else
         Worksheets("SOW").Rows("301:321").Hidden = False
    End If
    If Sheets("SOW").Range("B322") = " " Then
        Worksheets("SOW").Rows("322:342").Hidden = True
   Else
         Worksheets("SOW").Rows("322:342").Hidden = False
    End If
    If Sheets("SOW").Range("B343") = " " Then
        Worksheets("SOW").Rows("343:363").Hidden = True
   Else
         Worksheets("SOW").Rows("322:342").Hidden = False
    End If
    If Sheets("SOW").Range("B364") = " " Then
        Worksheets("SOW").Rows("364:384").Hidden = True
   Else
         Worksheets("SOW").Rows("364:384").Hidden = False
    End If
    If Sheets("SOW").Range("B385") = " " Then
        Worksheets("SOW").Rows("385:405").Hidden = True
   Else
         Worksheets("SOW").Rows("385:405").Hidden = False
    End If

我使用的第一个宏被分配给一个按钮。当我单击按钮时,所有没有值的白色行都隐藏了,但充当标题的灰色行却没有。灰色和白色行之间的区别是单元格的颜色,灰色单元格引用第二个电子表格上的灰色单元格,这是可以编辑的下拉列表,并且灰色行中的某些列被合并并居中为以及包裹。不确定这些差异是否会影响它。

【问题讨论】:

  • 哪一行有标题? 28 ?
  • 是的, 28, 49, 70, 91, 112, 133, 154, 175, 196, 217, 238, 259, 280, 301, 322, 343, 371, 392, 413, 434, 455, 476, 497, 518, 539, 560, 581, 602, 623, 644, 665, 686。我会编辑我的帖子,宏包含两个表。
  • 另外,@Mikku,我在两个表格之间的单元格中用与单元格背景相同的颜色写了公司名称。很抱歉没有考虑在我的原始解释中添加此行或所有充当标题的行。
  • 尝试将此If c.Value = "0" Then 更改为If Len(c.Value) < 1 Then
  • 由于某种原因,这使我的工作簿崩溃了两次。我将包含我尝试使用的另一个代码,该代码在我的原始帖子中也不起作用。

标签: excel vba


【解决方案1】:

反过来试试:

Sub HideRowsInSOW()

    For i = 706 to 29 step -1
        If Range("B" & i).Value = "0" Then
            Range("B" & i).EntireRow.Hidden = True
        End If
    Next i

End Sub

【讨论】:

  • 有趣的是,反向尝试隐藏了所有空白的灰色行,但没有空白的白色行。我应该把你的潜水艇和我的结合起来吗?
  • 没关系,我尝试调用两个潜艇,但它只是让我的工作簿崩溃。
【解决方案2】:

我能够通过更改宏中的一些变量的跟踪和错误来解决这个问题。最终的工作是将第二个宏中每个 If 语句的第一行代码中的每个 " " 更改为 0。我可以发誓我已经尝试过这样做,但我想如果它现在有效但以前没有。

例如:

    If Sheets("SOW").Range("B28") = 0 Then
          Worksheets("SOW").Rows("28:48").Hidden = True
        End If
    If Sheets("SOW").Range("B49") = 0 Then
        Worksheets("SOW").Rows("49:69").Hidden = True
     End If
    If Sheets("SOW").Range("B70") = 0 Then
        Worksheets("SOW").Rows("70:90").Hidden = True
    End If
    If Sheets("SOW").Range("B91") = 0 Then
        Worksheets("SOW").Rows("91:111").Hidden = True
    End If

等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2020-07-01
    • 2010-10-01
    • 1970-01-01
    • 2020-02-21
    • 2023-01-12
    相关资源
    最近更新 更多