2016-03-03 62 views
0

在我正在构建的Excel VBA模块中,如果超限货物的表包含任何内容,我需要执行一些代码。我最初写这个:我在这个IsEmpty子句中缺少什么?

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

但即使OOGData 空的,它使返回False。我试着用If IsEmpty(Range(“OOGData”))= False Then`,但这似乎没有任何区别。我当前的代码是

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

...但是,这仍然空范围内激活。

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

任何想法可能是什么问题?

+1

你清除了细胞?也就是说,删除内容,我相信,不会清空单元格,相反,我认为它包含0长度的字符串。所以检查可能需要检查它是空的还是长度为0的字符串(这是我的头,因此它可能不完全正确)。这是我用过的一些代码'如果IsNull(cv)或IsEmpty(cv)或c​​v =“”Then' – MikeT

回答

1

根据this information

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

在你的代码中你没有使用变量,所以你不应该期待正确的值。

当检查单细胞,你应该使用Len()函数:

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

何时检查,如果细胞的范围是空的使用此解决方案:

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

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

0

我决定作弊了。无论何时将OOG货物添加到OOG列表中,我都添加了一个布尔变量(bContainsOOG),该变量设置为True,然后报告子将对此进行检查。但是,感谢你们两位提出的这些建议,他们会派上用场,而我又陷入困境。 :-)

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行/列的限制