2016-05-18 45 views
0

我有一個名爲「checkConvert」的方法,它應該返回一個String。VBA - 不能從內部返回值If語句在For循環中

我創建了一個For循環,它在循環結束時返回一個值作爲checkConvert。另外,在For循環中,我已經設置了一個Case,並且在該Case內部,另一個For循環與If語句內部。在那些If語句中,我也嘗試以checkConvert的形式返回一個值,但它根本不起作用。

For i = val To lastColumn_source 
    For j = 1 To 3 
     Dim cellValue As String 
     cellValue = salesSource.Cells(j, i).Value 

     Select Case i 
      Case 1 
       Dim match As Boolean 
       match = False    'Default is false. 
              'Equating two cells = false. 

       For x = 1 To lastRow_check 
        If cellValue = sourceCheck.Cells(x, 1) Then 
         CRMDest.Cells(j, 2) = newName 
         match = True   'Match is found. Thus, true. 
        End If 
        If x = lastRow_check And match = False Then 
         checkConvert = newName   'Supposed to return 
                 'value. Doesn't 
                 'work. 
         MsgBox checkConvert    'But MsgBox works. 
        End If 
       Next x 
      Case 2        'Several more cases follow. 
      Case 13 
       checkConvert = "End of Program."  'Returns String 
                 'to "end program." 
                 'This one works. 
     End Select 

     checkConvert = "Move."       'This return also 
                 'works. 
    Next j 
Next i 

回答

1
checkConvert = newName   'Supposed to return 
            'value. Doesn't 
            'work. 
    MsgBox checkConvert    'But MsgBox works. 

它看起來像你的印象是分配函數的返回值立即返回下。這不是VBA的工作原理。

你已經分配了一個返回值,但代碼保持運行,因爲分配就是這樣:賦值

如果要設定它的返回值後立即退出該功能,你需要明確這樣做:

checkConvert = newName 
    Exit Function 

的返回值是「工作」,只有制定出純粹的運氣。您將在循環內分配返回值,並且永遠不會跳出它,所以函數返回的值是最後一次迭代中最後分配的任何值checkConvert

+0

我的上帝。該死的。這很有道理。我會看到如果我執行「退出功能」會發生什麼情況。非常感謝,馬特杯。欣賞它。 :) – TheBSITGuy