我在IsEmpty条款中缺少什么?

时间:2016-03-03 10:42:52

标签: vba excel-vba excel

在我正在构建的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

...但仍然以空范围激活。

我已经确定没有公式,隐藏值或任何可能出现的内容。

知道问题可能是什么?

3 个答案:

答案 0 :(得分:1)

根据this information

  

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

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

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

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

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

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

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

答案 1 :(得分:0)

我决定作弊。我没有在那里检查列表,而是添加了一个布尔变量(bContainsOOG),只要将OOG货物项目添加到OOG列表,就会设置为 True ,然后报告子报告反而检查。但是感谢你们这些建议,他们会在另一点上派上用场,我会被困在一起。 : - )

答案 2 :(得分:0)

这是一个我认为非常贴合的功能: -

' 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行/列