If Not Isempty returns “” value but continues to the next statement

人盡茶涼 提交于 2019-12-11 19:27:40

问题


this codes checks column G and if the value of it is "Test" gets the corresponding value at column E and pastes it to the next row.

 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

回答1:


IsEmpty isn't a check to see if a Cell has a value, it's a check to see if the variable has been initialized.

'Note lack of Option Explicit.

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

In the code from the question, destRowValue is initialized with Dim destRowValue As String. To check whether a cell has a value or not, you need to test against vbNullString...

If Cells(currentRow, destCol_part).Text = vbNullString Then

...although keep in mind that if you have the possibility of a function in the target cell you might also want to test for IsError:

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

Because...

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



回答2:


Replace

If Not IsEmpty(destRowValue) Then

with

If destRowValue <> "" Then


来源:https://stackoverflow.com/questions/38517881/if-not-isempty-returns-value-but-continues-to-the-next-statement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!