繁体   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