首先,我是编程VBA的初学者。也就是说,这是交易:我有一个代码可以找到并突出显示所有多个关键字(如果你想查看我的代码,它是here)。在此代码的末尾,有以下If
语句:
If Not rng Is Nothing Then
rng.EntireRow.Interior.ColorIndex = 3
End If
现在我想隐藏未突出显示的行。经过大量的研究(参考文献:1,2,3,4,5。)关于如何隐藏行我有这个想法:< / 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
语句来运行它会很棒!
答案 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
...