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

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

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

现在我想隐藏没有突出显示的行。 经过大量研究(参考文献: 1,2,3,4,5 )关于如何隐藏行,我有这样的想法:

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

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

 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 

这个macros有一个问题,当我运行一次它发现一个没有突出显示的行,它将隐藏所有其他行独立,如果他们突出显示与否。 有人可以解释一下我的代码有什么问题,让macros运行起来。 如果有人也可以指出我怎么能使用我以前的想法中的Else声明来运行,那将是非常棒的!

你的第一个代码将无法工作。 期。 你正在testing,看看variablesrng是否设置为某些东西 ,如果是的 ,你可以使用它(和你做的)。 如果它没有设置成什么 (即它的值是Nothing ),那么你不能将它用于任何目的,因为rng没有指向任何东西。 你不能隐藏虚无。

你的第二块代码对我来说工作得很好。 我稍微修改它,以便在一个新的空白工作簿中工作,如下所示:

 Sub Test() Dim i As Integer Dim ws As Worksheet Set ws = Sheets("Sheet1") For i = 1 To 10 Step 2 ws.Rows(i).Interior.ColorIndex = 3 Next 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对象的ColorIndex属性返回Null 。 而是针对单个单元格testingColorIndex 。 在你的情况下, rngvariables应该引用单个单元格(如果我正确读取了你的代码),所以testingrng的ColorIndex 。 如果有颜色,然后请回应。

让我知道如果有帮助。