我有一個簡單的宏,通過一系列的張去不去每個循環,收集基於輸入的數據名稱,然後將所有這些格式良好的的Word文件內。我大部分都想通了,但有一個bug讓我煩惱。它必須與獲取基於名稱的手機號碼的代碼相關。這裏是功能:對於通過所有的數據
Function findCell(namePerson As String) As String
Dim splitName As Variant
Dim lastName As String
Dim firstName As String
splitName = Split(namePerson, " ")
lastName = splitName(UBound(splitName))
ReDim Preserve splitName(UBound(splitName) - 1)
firstName = Join(splitName)
For Each b In Worksheets("IT").Columns(1).Cells
If b.Value = lastName Then
If Sheets("IT").Cells(b.row, 2).Value = firstName Then findCell = Sheets("IT").Cells(b.row, 4).Value
End If
Next
End Function
手機號碼在它自己的名爲「IT」的表上。第一列有姓氏,第二列有第一個名字,第四列有手機號碼。有些人的名字有多個部分,這就是爲什麼你會看到一些奇怪的分裂,ReDiming和一起回來。這部分工作得很好。
的問題,當你有多個人同樣的姓氏出現。該函數會找到具有正確姓氏的人,通過第一個If語句。然後它會比較第一個名字。如果匹配,它會返回手機號碼的值。之後,即使第一個名稱不匹配,for循環也會停止。因此,如果某人碰巧有相同的姓氏,但名字不檢查,則不會返回任何內容。
我試圖把返回調用循環外都在一起,而且它仍然不有所作爲。
正如Brad所示,如果您想暫停任何進一步處理,您需要在設置返回值後立即添加'Exit Function'或'Exit For'。設置返回值僅決定函數代碼爲*完成時將返回的內容*:它不會導致函數立即終止並返回該值。 – 2013-05-10 16:38:23