【发布时间】:2021-02-13 18:03:29
【问题描述】:
我有两张表(“客户”、“订单”)。我想通过电话号码匹配两者。
在客户表中,我有一个电话列表。
我正在尝试循环访问“客户”列中的所有数字,在“订单”表中找到匹配项,其中包含侧列值中的邮件。
我正在努力退出循环,因为我没有更改我的变量“c”,当它不在第一行时,它甚至找不到邮件。
Dim wb As Workbook
Dim ws_clients As Worksheet
Dim ws_orders As Worksheet
Dim Lastrow As Long
Dim Phone_LookUp As Variant
Set wb = Application.ActiveWorkbook
Dim firstAddress As String
Dim finalrow As Long, i As Long
Dim shtCS As Worksheet, shtFD As Worksheet, rw As Range
Dim c As Range
Set shtCS = wb.Sheets("Clients")
Set shtFD = wb.Sheets("Orders")
finalrow = shtCS.Range("A" & Rows.Count).End(xlUp).Row
With shtFD.Columns(3)
For i = 2 To finalRow
Set c = .Find(shtCS.Cells(i, 13).Value)
If Not c Is Nothing Then
firstAddress = c.Address
Do
If c.Offset(0, 1).Value <> "" Then
shtCS.Cells(i, 22).Value = c.Offset(0, 1).Value
i = i + 1
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
Next i
End With
【问题讨论】:
-
应该是
Dim c as range和Loop While c.Address <> firstAddress。所以你的 Find 什么也没找到?您是否已单步执行您的代码? -
在循环中去掉
i = i + 1。你不应该改变循环内的循环变量,因为它是由循环自动递增的。 -
如果我可以根据痛苦的经验做出预测:您将花费更多的时间、精力和代码来使电话号码和电子邮件地址的组合无需创建唯一的客户 ID在任何情况下都可以依赖的唯一客户 ID。障碍是人们不愿在工作簿中添加一个专用工作表来包含列表。这种不情愿没有事实或理由。隐藏床单并忘记它,如果它打扰你。
-
你正在逆转你正在寻找和改变的东西。