在我正在构建的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
...但仍然以空范围激活。
我已经确定没有公式,隐藏值或任何可能出现的内容。
知道问题可能是什么?
答案 0 :(得分:1)
返回一个布尔值,指示变量是否已经过 初始化。
在您的代码中,您不使用变量,因此您不应该期望正确的值。
检查单个单元格时,应使用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行/列