为什么`Empty`在这个VBA代码中不起作用?

时间:2015-07-22 15:25:59

标签: excel vba excel-vba

下面的代码应该检查单元格是否为空,如果是空的,则将B26的内容粘贴到该单元格中。如果单元格不为空,则继续检查其下方的单元格。我尝试使用Access 2013 Access 2007 Access 2003 Aliens Excel 2007 Excel 2003 Everybody is happy Powerpoint 2007 Powerpoint 2003 但是没有用,所以我认为Excel将所有空单元格默认为0.所以我尝试使用IsEmpty(如下面的代码所示)但这不起作用无论是。

Empty

4 个答案:

答案 0 :(得分:5)

您可以使用

If Application.WorksheetFunction.CountA(Range("B27:C27")) = 0 Then

而不是

If Range("B27:C27") = Empty Then

顺便说一句,在粘贴数据之前无需选择范围。

此代码

    Range("B27:C27").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False

可以替换为

    Range("B27:C27").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False

答案 1 :(得分:4)

在VBA中使用EmptyIsEmpty()主要是为了查看变量是否已初始化,但通常会误用它来检查Range是否有值。

如果你想查看一个范围是否为“空”'然后使用:

If Range("B27").Value = vbNullString Then
    '// Do Something
End If

如果要检查具有多个单元格的Range是否为空,则可以使用COUNTA()参数:

If [COUNTA(B27:C27)=0] Then
    '// Do Something
End If

(或使用WorksheetFunction类同样的事情......)

If WorksheetFunction.CountA(Range("B27:C27")) = 0 Then
    '// Do Something
End If

答案 2 :(得分:0)

尝试IsEmpty

If IsEmpty(ws.Range("A1").Value) = True Then

End if

答案 3 :(得分:-2)

你试过吗

var = nz(YourValue,"")

然后用

进行检查
If var = "" Then 'moar code 

或只是检查

If nz(YourValue,"") = "" Then 'moar code