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