Excel VBA - 如何引用单元格的可见内容而不是其公式?

时间:2015-04-09 20:47:20

标签: vba excel-vba excel

我正在尝试遍历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

我希望我的代码评估单元格的可见输出,而不是实际内容。

我觉得这里有一个非常简单的解决方案,但我一直在寻找一段时间没有成功。我是新手,很明显......

5 个答案:

答案 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