我正在尝试遍历Excel电子表格中的特定范围((“B13:B65”),具体而言)并隐藏其中包含“X”的所有行。像这样:
For i = 13 to 65
If Cells(i, 2) = "x" Or "X" Then Rows(i).RowHeight = 0
Next i
问题是我遇到了类型不匹配错误。
我认为这种情况正在发生,因为此范围内的所有单元格都是公式而不是文本字符串。例如,单元格B13的内容是:
='Monthly'!$C$13
我希望我的代码评估单元格的可见输出,而不是实际内容。
我觉得这里有一个非常简单的解决方案,但我一直在寻找一段时间没有成功。我是新手,很明显......
答案 0 :(得分:5)
基于此示例:https://msdn.microsoft.com/en-us/library/office/ff195193.aspx
Sub Main()
For Each c in Worksheets("Sheet1").Range("A1:D10") 'Change for your range
If Lcase(c.Value) = "x" Then
'''Rest of your code
End If
Next c
end sub
答案 1 :(得分:3)
您因OR而收到错误。在Or之后,必须有一些东西可以被评估为真或假。或者" X"永远不会成为真或假。你需要......
If Cells(i, 2) = "x" Or Cells(i, 2) = "X" Then Rows(i).RowHeight = 0
只要您想在其他地方使用相同的代码。
答案 2 :(得分:2)
使用Value属性:
If Cells(i, 2).Value = "x"
答案 3 :(得分:1)
循环通过静态范围
Dim rng As Range, c As Range
Set rng = Range("B13:B65")
For Each c In rng.Cells
If UCase(c) = "X" Then
c.EntireRow.Hidden = True
End If
Next c
答案 4 :(得分:0)
您可以使用自动过滤器
Sub HideEm()
Dim rng1 As Range
Set rng1 = ActiveSheet.Range("$B$1:$B$65")
rng1.Parent.AutoFilterMode = False
rng1.AutoFilter Field:=1, Criteria1:="<>x", Operator:=xlOr, Criteria2:="<>X"
End Sub