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

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

IsEmpty不是检查单元是否有值的检查,而是检查variables是否已被初始化

 '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 。 要检查一个单元格是否有值,你需要testingvbNullString

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

…但请记住,如果您有可能在目标单元格中​​的函数,您可能还想testingIsError:

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

更换

 If Not IsEmpty(destRowValue) Then 

 If destRowValue <> "" Then