隐藏行的宏并不隐藏每一个宏

时间:2019-07-26 03:19:37

标签: excel vba

我编写了两个宏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

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

2 个答案:

答案 0 :(得分:0)

反向尝试:

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

答案 1 :(得分:0)

我可以通过更改宏中某些变量的错误和线索来弄清楚。最终的工作是在第二个宏的每个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

以此类推。