簡體   English   中英

對於每個循環不遍歷所有數據

[英]For Each loop not going through all the data

我有一個簡單的宏,它經過一系列工作表,根據輸入的數據收集名稱,然后將其全部放入格式正確的Word文檔中。 我已經弄清楚了大部分,但是有一個錯誤讓我很煩。 它與根據名稱獲取手機號碼的代碼有關。 這是函數:

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”。 第一列具有姓氏,第二列具有名字,第四列具有手機號碼。 有些人的名字有多個部分,這就是為什么您看到一些奇怪的拆分,重新定位和重新結合在一起的原因。 那部分工作正常。

當您有多個姓氏相同的人時,就會出現此問題。 該函數將通過第一個If語句找到姓氏正確的人。 然后它將比較名字。 如果匹配,它將像應返回的那樣返回手機號碼的值。 之后,即使名字不匹配,for循環也會停止。 因此,如果有人碰巧使用了相同的姓氏,但名字沒有被核對,則不會返回任何內容。

我已經嘗試將return調用放到循環外部,但這仍然沒有任何效果。

由於您沒有使用數據庫,因此主鍵列可能很困難。 通過當前設置,您可以嘗試執行此操作。

  • 不會瀏覽列中的每個單元格
  • 使用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

看來您是想通過解決此問題來推遲處理實際問題。

您遇到了問題,因為您的“鍵”(名稱)不是唯一的。 您已經解決了一個命名沖突,現在您正嘗試解決另一個命名沖突。

如何獲得您知道唯一的密鑰(如GUID)呢? 這樣就不再需要解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM