如何隐藏未突出显示的所有行?

时间:2015-06-30 12:49:21

标签: excel vba excel-vba for-loop excel-2010

首先,我是编程VBA的初学者。也就是说,这是交易:我有一个代码可以找到并突出显示所有多个关键字(如果你想查看我的代码,它是here)。在此代码的末尾,有以下If语句:

If Not rng Is Nothing Then
    rng.EntireRow.Interior.ColorIndex = 3
End If

现在我想隐藏未突出显示的行。经过大量的研究(参考文献:12345。)关于如何隐藏行我有这个想法:< / p>

If Not rng Is Nothing Then
    rng.EntireRow.Interior.ColorIndex=3
Else
    rng.EntireRow.Hidden = True
End if

但它根本不起作用。沮丧,因为我认为这真的是一个好主意,我创建了一个新的工作簿,并试图创建一个简单的宏来实现我的目标,然后我会将其添加到上面描述的搜索和突出显示宏。现在它看起来像这样:

Sub Test()
Dim i As Integer
Dim ws As Worksheet

    Set ws = Tabelle1

    For i = 1 To 10
        If ws.Rows(i).Interior.ColorIndex = 3 Then
            MsgBox "Super"
        Else
            ws.Rows(i).Hidden = True
        End If
    Next i

End Sub

这个宏有一个问题,当我找到一个没有突出显示的行时运行它会突然显示所有其他Rows是否独立。有人可以解释一下我的代码出了什么问题,这会让Macro运行它。如果有人也可以指出我如何使用我之前的想法中的Else语句来运行它会很棒!

3 个答案:

答案 0 :(得分:2)

您的第一段代码将工作。期。您正在测试以查看变量rng是否设置为某些内容,如果是,您可以使用它(您可以)。如果它未设置为某事(即其值为Nothing),则无法将 用于任何目的,因为{ {1}}并不指向任何事情。你无法掩饰虚无。

你的第二段代码对我来说很合适。我稍微修改它以在一个新的空白工作簿中工作,     如下:

rng

对我来说就像一个魅力。

答案 1 :(得分:1)

问题在于ColorIndex对象的Rows属性返回Null。相反,针对单个单元格测试ColorIndex。在您的情况下,rng变量应引用单个单元格(如果我正确读取您的代码),因此请测试rng的ColorIndex。如果有颜色,请随意回复。

如果有帮助,请告诉我。

答案 2 :(得分:0)

我创建了一个宏来隐藏除突出显示的单元格之外的其他列和行。按 F9 键运行宏。 希望对你有用。

Sub Hide_Columns()
    Dim i, a As Long, s, t As Integer
    If TypeName(Selection) <> "Range" Then Exit Sub
    If Rows(Rows.Count).EntireRow.Hidden Or Columns(Columns.Count).EntireColumn.Hidden Then
        Cells.EntireColumn.Hidden = False
        Cells.EntireRow.Hidden = False
        Exit Sub
    End If
    i = Selection.Rows(1).Row
    a = i + Selection.Rows.Count - 1
    s = Selection.Columns(1).Column
    t = s + Selection.Columns.Count - 1
    Application.ScreenUpdating = False
    On Error Resume Next
    Range(Cells(1, 1), Cells(i - 1, 1)).EntireRow.Hidden = True
    Range(Cells(a + 1, 1), Cells(Rows.Count, 1)).EntireRow.Hidden = True
    ...

来源:Excel hide all columns except selected

enter image description here