2013-05-10 78 views
1

我有一個簡單的宏,通過一系列的張去不去每個循環,收集基於輸入的數據名稱,然後將所有這些格式良好的的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循環也會停止。因此,如果某人碰巧有相同的姓氏,但名字不檢查,則不會返回任何內容。

我試圖把返回調用循環外都在一起,而且它仍然不有所作爲。

+0

正如Brad所示,如果您想暫停任何進一步處理,您需要在設置返回值後立即添加'Exit Function'或'Exit For'。設置返回值僅決定函數代碼爲*完成時將返回的內容*:它不會導致函數立即終止並返回該值。 – 2013-05-10 16:38:23

回答

4

由於您沒有使用數據庫,主鍵列可能很難。隨着你目前的設置,你可以試試這個。 它

  • 不會通過每一個細胞看起來列
  • 使用Option Explicit
  • 將返回第一個發現並退出
  • 會無動於衷大/小寫和前/後白空間。

Option Explicit 

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) 

    Dim ws As Worksheet, lastrow As Long, r As Long 
    Set ws = Worksheets("IT") 
    lastrow = ws.Cells(1, 1).End(xlDown).Row 'or whatever cell is good for you 

    For r = 1 To lastrow 
     If UCase(Trim(ws.Cells(r, 1))) = UCase(Trim(lastName)) _ 
      And UCase(Trim(ws.Cells(r, 2))) = UCase(Trim(firstName)) Then 

      findCell = ws.Cells(r, 4) 
      Exit For 
     End If 

    Next r 

End Function 
+0

FYI這似乎在Excel中生成一個GUID:http://stackoverflow.com/questions/7031347/how-can-i-generate-guids-in-excel – John 2013-05-10 16:38:16

+0

@約翰有趣的,我喜歡它! :)我認爲這個缺點是每次Excel計算(這基本上是任何時候你做任何事情)你的GUID改變。爲了獲得新的GUID,您需要使用此公式,然後爲新記錄粘貼值。 – Brad 2013-05-10 17:08:19

+0

對。我沒有考慮處理電子表格而不是數據庫表格的困難。 – John 2013-05-10 17:21:55

2

好像你推遲,試圖解決這個問題一個處理真正的問題。

您正在運行到的問題,因爲你的「鑰匙」(名字)不是唯一的。你已經圍繞一個命名衝突工作,現在你正在嘗試解決另一個命名衝突。

買一臺鍵(如GUID),你知道會是唯一的麼?那麼就不再需要解決這個問題了。

相關問題