If Not Isempty returns "" value but continues to the next statement

If Not Isempty returns "" value but continues to the next statement

此代码检查 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

替换

If Not IsEmpty(destRowValue) Then

If destRowValue <> "" Then

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?"