vba:确定更改范围是否为空

时间:2014-10-23 17:49:15

标签: excel-vba vba excel

我有两个电子表格,一个包含程序和一个项目。我使用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

3 个答案:

答案 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