如果Not Isempty返回“”值但继续下一个语句

时间:2016-07-22 03:53:02

标签: excel vba if-statement is-empty

此代码检查列G,如果其值为“Test”,则在E列获取相应的值并将其粘贴到下一行。

 Sub FindOpcode_Placepart()

Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
Dim destCol_part As Integer, destRow As Integer
Dim currentRowValue As String
Dim destRowValue As String

sourceCol_opcde = 7   ' find last row in column E
rowCount = Cells(Rows.Count, sourceCol_opcde).End(xlUp).Row
destCol_part = 5
destRow = Cells(Rows.Count, sourceCol_opcde).End(xlUp).Row


'for every row, find the Opcode
For currentRow = 1 To rowCount
    If Cells(currentRow, sourceCol_opcde).Value = "Test" Then
        destRowValue = Cells(currentRow, destCol_part).Text


            If Not IsEmpty(destRowValue) Then ' this code returns "" value but proceeds with the next statement.

             destRow = currentRow + 1
             While Cells(destRow, sourceCol_opcde).Value = "Use-Limit"
                    Cells(destRow, destCol_part).Value = destRowValue
                    destRow = destRow + 1
            Wend

        End If
    End If
Next

End Sub

2 个答案:

答案 0 :(得分:4)

IsEmpty并非检查Cell是否有值,而是检查 变量是否已初始化

'Note lack of Option Explicit.

Private Sub Example()
    Debug.Print IsEmpty(foo)    'True.
    foo = 42
    Debug.Print IsEmpty(foo)    'False.
End Sub

在问题的代码中,destRowValue初始化为Dim destRowValue As String。要检查单元格是否具有值,您需要针对vbNullString ...

进行测试
If Cells(currentRow, destCol_part).Text = vbNullString Then

...虽然请记住,如果你有可能在目标单元格中​​有一个函数,你可能也想测试IsError:

If Not IsError(Cells(currentRow, destCol_part)) And _
       Cells(currentRow, destCol_part).Text = vbNullString Then

由于...

Cells(1, 1).Value = "=SomefunctionThatDoesntExist"
Debug.Print Cells(1, 1).Text    'Returns "#NAME?"

答案 1 :(得分:0)

替换

If Not IsEmpty(destRowValue) Then

If destRowValue <> "" Then