【问题标题】:What am I missing in this IsEmpty clause?我在这个 IsEmpty 子句中缺少什么?
【发布时间】:2016-03-03 19:04:17
【问题描述】:

在我正在构建的 Excel VBA 模块中,如果超限货物表包含任何内容,我需要执行一些代码。我最初是这样写的:

If Not IsEmpty(Range("OOGData")) Then
...
Else
...
End If

但即使 OOGData 为空,它也会不断返回 False。我已经尝试过 If IsEmpty(Range("OOGData")) = False Then` 但这似乎没有任何区别。我当前的代码是

If IsEmpty(Range("OOGData")) = False Then

...但是 still 在空白范围内激活。

我已确保没有公式、隐藏值或任何可能显示的内容。

知道可能是什么问题吗?

【问题讨论】:

  • 你清除了单元格吗?也就是说,我相信删除内容不会清空单元格,而是我认为它包含 0 长度的字符串。因此,检查可能必须检查它是否为空或长度为 0 的字符串(这超出了我的想象,因此它可能不完全正确)。这是我使用过的一些代码If IsNull(cv) Or IsEmpty(cv) Or cv = "" Then

标签: vba excel


【解决方案1】:

根据this information

返回一个布尔值,指示变量是否已被 初始化。

在您的代码中,您没有使用变量,因此您不应该期望正确的值。

检查单个单元格时,您应该使用Len() 函数:

If Len(Range("OOGData"))=0 Then
    'cell is empty

检查单元格范围是否为空时,请使用以下解决方案:

If WorksheetFunction.CountA(Range("OOGData"))=0 Then
    'rabge is empty

我能想到的最后一种选择是使用循环。

【讨论】:

    【解决方案2】:

    我决定作弊。我没有在此处检查列表,而是添加了一个布尔变量 (bContainsOOG),只要将 OOG 货物项目添加到 OOG 列表中,该变量就会设置为 True,然后报告子会检查相反。但是感谢你们俩的这些建议,它们会在我陷入困境的另一个地方派上用场。 :-)

    【讨论】:

      【解决方案3】:

      这是一个我认为非常适合的函数:-

      ' Function to determine the last (first blank/null/empty) cell in a series of data in either a column
      ' or row
      ' Usage :- DataSeriesEnd(w,r,b)
      '           where   w is the name of the worksheet.
      '                   r is the row or column as an integer
      '                   b is a boolean (true/false) if true then processing a column, if false a row
      Public Function DataSeriesEnd(Worksheet As String, rc_index As Integer, bycolumn As Boolean) As Integer
          Dim cv As Variant
      
          For DataSeriesEnd = 1 To 500
              If bycolumn Then
                  cv = Worksheets(Worksheet).Cells(DataSeriesEnd, rc_index)
              Else
                  cv = Worksheets(Worksheet).Cells(rc_index, DataSeriesEnd)
              End If
              If IsNull(cv) Or IsEmpty(cv) Or cv = "" Then Exit For
          Next DataSeriesEnd
      
          ' Position to previous cell (i.e. this one is empty)
          DataSeriesEnd = DataSeriesEnd - 1
      
      End Function
      

      注意!限制为 500 行/列

      【讨论】:

        猜你喜欢
        • 2011-01-24
        • 1970-01-01
        • 2019-07-01
        • 2021-09-19
        • 2018-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多