我有两个电子表格,一个包含程序和一个项目。我使用D
循环来查看国家/地区内的项目。我想弄清楚每个项目的一组单元格是否为空白。我尝试了一些事情。如果所有项目的sustTrue
为空,则下面0
应保持rangeVar
,但事实并非如此。请帮忙!
Sub NO_Sheet()
Sheets("Program_FINAL").Select
Range("C2").Select ' C column is country
Dim IndicatorLineIterator
Do Until IsEmpty(ActiveCell) ' loop until country is blank
IndicatorLineIterator = 61
Dim PRGNum
PRGNum = ActiveCell.Offset(0, -2).Value ' Identify the program number
Sheets("Project_FINAL").Select
Range("A2").Select ' A column is the project number
Dim rangeVar, sustTrue
sustTrue = 0
Do Until IsEmpty(ActiveCell) ; loop until Project number is blank
If PRJNum = ActiveCell.Value Then
'rangeVar = ("O" & ActiveCell.Row & ":S" & ActiveCell.Row)
rangeVar = Range(ActiveCell.Offset(0, 14) & ":" & ActiveCell.Offset(0, 17))
If Not IsEmpty(rangeVar) Then
sustTrue = sustTrue + 1
MsgBox (sustTrue)
End If
End If
ActiveCell.Offset(1, 0).Select
Loop
End If
'Sheets(SheetADPName).Range("M16").Value = sustTrue
Sheets("Program_FINAL").Select
ActiveCell.Offset(1, 0).Select
Loop
End Sub
答案 0 :(得分:0)
您的rangeVar
不是范围对象。
强烈输入您的变量:
Dim rangeVar as Range
Dim sustTrue as Long 'Or As Integer
Dim cl as Range
然后使用Set
关键字来分配对象变量而不是连接,我们只需列出用逗号分隔的两个单元格,这将创建范围:
Set rangeVar = Range(ActiveCell.Offset(0, 14), ActiveCell.Offset(0, 17))
此外,您无法在范围数组上可靠地使用IsEmpty
,只能使用单个单元格或其他简单数据类型。您可以通过迭代范围来解决这个问题:
For each cl in rangeVar.Cells
If Not IsEmpty(cl.Value) Then
sustTrue = sustTrue + 1
End If
Next
MsgBox (sustTrue)
IsEmpty
功能可能不是进行此项检查的万无一失的方法。但上面的其他逻辑应该有所帮助。如果您在IsEmpty
部分遇到问题,请与我们联系。
另一种选择是简单地从该范围内的单元格总数中减去空白数量(如果单元格不是“真正”空白,则再次可能不是100%可靠...)... < / p>
sustTrue = rangeVar.Cells.Count - rangeVar.SpecialCells(xlCellTypeBlanks).Cells.Count
答案 1 :(得分:0)
我一直在努力,以下为我工作。可能有更简化的方法来做到这一点,但这有效!
If Not ActiveCell.Offset(0, 14) = "" Or Not ActiveCell.Offset(0, 15) = "" Or Not ActiveCell.Offset(0, 16) = "" Or Not ActiveCell.Offset(0, 17) = "" Then
sustTrue = sustTrue + 1
MsgBox (sustTrue)
End If
答案 2 :(得分:-2)
RangeVar
是一个范围对象。您需要执行Isempty(RangeVar.Value)
我认为这已在此处得到解答:Using VBA to check if below cell is empty