【问题标题】:Excel VBA - How do I refer to a cell's visible content rather than its formula?Excel VBA - 如何引用单元格的可见内容而不是其公式?
【发布时间】:2015-04-16 17:09:28
【问题描述】:

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

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

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

【问题讨论】:

标签: vba excel


【解决方案1】:

基于此示例: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

【讨论】:

    【解决方案2】:

    由于 OR,您会收到错误消息。在 Or 之后必须有一些东西可以被评估为真或假。或者“X”永远不会是真或假。你需要...

    If Cells(i, 2) = "x" Or Cells(i, 2) = "X" Then Rows(i).RowHeight = 0

    只要您想在其他地方使用相同的代码。

    【讨论】:

      【解决方案3】:

      使用价值属性:

      If Cells(i, 2).Value = "x" 
      

      【讨论】:

        【解决方案4】:

        遍历静态范围

        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
        

        【讨论】:

          【解决方案5】:

          您可以使用自动过滤器

          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
          

          【讨论】:

            猜你喜欢
            • 2015-09-08
            • 1970-01-01
            • 1970-01-01
            • 2012-07-19
            • 1970-01-01
            • 1970-01-01
            • 2018-12-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多