【问题标题】:Excel VBA - how to check for non-blank values in hidden rangeExcel VBA - 如何检查隐藏范围内的非空白值
【发布时间】:2016-12-03 10:38:55
【问题描述】:

我会先明确我的目标,然后再详细解释。

我的目标是检查一个范围内的非空白值,但只在该范围的隐藏单元格中,然后在不同的单元格中使用条件格式,取决于范围内的单元格是否为空。

我有一个名为 Location_Address_RangeCheck 的命名范围,它直接覆盖位置编号右侧的单元格,就像这样(位置编号不是范围的一部分)。 当位置数量发生变化时,超出该数量(最多 25 个)的行会自动隐藏在 worksheet_change 上,以减少混乱并减少滚动以查看其下方的内容。该代码运行良好,因此我不会在此处发布它,以免将任何人与我要完成的工作混淆。

我想提供一种保护措施,以确保隐藏行中没有可能影响输出的值(即,如果有人选择“3”作为“位置数”,但单元格中的数据可能位于第 8 个位置的行)。

我的目标是检查范围内的非空白值,但仅在隐藏单元格中,然后在所选位置数量旁边的单元格中使用条件格式,具体取决于是否范围内的单元格是否为空。

所以如果隐藏单元格中有 数据,那么它会导致工作表看起来像这样 .

到目前为止,我已经尝试了很多不同的东西,但我没有取得任何进展。我在互联网上搜索试图找到解决方案,但我发现的一切都是关于在可见细胞中寻找东西,这与我想要实现的目标相反。

这是我到目前为止编写的代码,我知道这并没有达到我的目标:

Sub testhiddencells() 
    Dim myRange As Range 

    Set myRange = Range("Location_Address_RangeCheck") 
    NumRows = Application.WorksheetFunction.CountA(myRange) 

    If Range("Location_Address_RangeCheck").Hidden = True Then 
        If Application.WorksheetFunction.CountA(Range("Location_Address‌​_RangeCheck")) <> 0 Then 
            MsgBox "There's something there" 
        End If 
    End If 

End Sub

【问题讨论】:

  • 哪一部分给您带来了麻烦? .Hidden?你看过here吗?
  • 我只是不知道如何构造它以仅搜索该范围内的隐藏单元格,然后触发位置数量右侧单元格中的条件格式。甚至只识别隐藏的单元格。我做错了什么,我只是不知道如何前进。这是我到目前为止所拥有的,我知道这是行不通的。我试图让它甚至只识别隐藏的单元格。但我睡眠不足,不知道该怎么办。
  • Sub testhiddencells() Dim myRange As Range Set myRange = Range("Location_Address_RangeCheck") NumRows = Application.WorksheetFunction.CountA(myRange) If Range("Location_Address_RangeCheck").Hidden = True Then If Application. WorksheetFunction.CountA(Range("Location_Address_RangeCheck")) 0 Then MsgBox "There's something there" End If End If End Sub

标签: excel vba


【解决方案1】:

这是一个检查单元格是否隐藏且非空的最小示例:

Option Explicit

Sub Test()

    Dim ws As Worksheet
    Dim rngToCheck As Range

    'test range - all cells populated with 'a' and 3 are hidden
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set rngToCheck = ws.Range("A1:A7")

    If TestForNonBlankCellsInHiddenRange(rngToCheck) Then
        'do you conditional format stuff here
    End If

End Sub

Function TestForNonBlankCellsInHiddenRange(rngToCheck As Range) As Boolean

    Dim rngCell As Range
    Dim blnCheck As Boolean

    'assume that hidden cells are blank
    blnCheck = False

    'iterate range
    For Each rngCell In rngToCheck
        If rngCell.EntireRow.Hidden And Not IsEmpty(rngCell.Value) Then
            'found a hidden and non-empty cell
            blnCheck = True
            'debug address of this cell
            Debug.Print rngCell.Address
        End If
    Next rngCell

    'return check
    TestForNonBlankCellsInHiddenRange = blnCheck

End Function

查看您已经使用的代码,您应该能够根据工作表的特定用例进行调整。

【讨论】:

  • 这就像一个魅力!我能够轻松地将其调整为我需要的内容。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多