运行-时间错误 1004 VBA-for 循环的第二个实例上的 VLookup?
Run-Time Error 1004 VBA - VLookup on second instance of for loop?
我的 VBA 代码中的 VLookup 有问题。当我没有使用 CurrentRegion 将范围作为动态大小时,它可以完美地工作,现在无论出于何种原因,它仅适用于单个循环并在第一个 VLookup 时失败。我试过使用和不使用 with 块。我有一个变量将替换 for 循环中的 5 并起作用,但将其保留为原始状态,因此不会影响它。
如果这是重复的,我深表歉意,但我找不到答案。任何帮助将不胜感激。
Set jobTypeData = Worksheets("JobType").Range("A1").CurrentRegion
For i = 1 To 5
jobTypeTemp = Worksheets("Employees2").Cells(i + 1, 16).Value
jobRoleTemp = Worksheets("Employees2").Cells(i + 1, 17).Value
'Creates variables relevant to the job type
With Worksheets("JobType")
minHours = CDec(WorksheetFunction.VLookup(jobTypeTemp, jobTypeData, 2))
maxHours = CDec(WorksheetFunction.VLookup(jobTypeTemp, jobTypeData, 3))
minShift = CDec(WorksheetFunction.VLookup(jobTypeTemp, jobTypeData, 5))
maxShift = CDec(WorksheetFunction.VLookup(jobTypeTemp, jobTypeData, 6))
shiftGap = CDec(WorksheetFunction.VLookup(jobTypeTemp, jobTypeData, 7))
End With
这下面有更多代码,但一切正常,在使用动态数据大小之前工作正常。
有效的代码不会更改 jobTypeData 的内容或大小。
我还检查了 VLookup returns 的值,它们都是正确的。我唯一能想到的是它找不到第二个 jobType 但是我已经检查过它们是相同的(没有隐藏的空格)。
答案似乎与 VLookup 使用的方式有关 'approximate match'。
我一直认为,如果 VLookup 是一个选项,它仍然会提供精确匹配,而且因为我有严格的数据验证,所以我从没想过使用近似匹配会是一个问题。然而,事实证明,它不仅有点不可预测,而且实际上也不可靠。
检查后假设“角色名称”比“团队经理”更接近“团队经理”。将其更改为使用 'exact match' 后,一切正常。之前工作的代码也没有更改。
嗯,吸取教训...
当你有一个完全匹配的时候总是使用(不管你有多自信,以我为例):
VLOOKUP(arg1, arg2, arg3, FALSE)
不是:
VLOOKUP(arg1, arg2, arg3)
我的 VBA 代码中的 VLookup 有问题。当我没有使用 CurrentRegion 将范围作为动态大小时,它可以完美地工作,现在无论出于何种原因,它仅适用于单个循环并在第一个 VLookup 时失败。我试过使用和不使用 with 块。我有一个变量将替换 for 循环中的 5 并起作用,但将其保留为原始状态,因此不会影响它。
如果这是重复的,我深表歉意,但我找不到答案。任何帮助将不胜感激。
Set jobTypeData = Worksheets("JobType").Range("A1").CurrentRegion
For i = 1 To 5
jobTypeTemp = Worksheets("Employees2").Cells(i + 1, 16).Value
jobRoleTemp = Worksheets("Employees2").Cells(i + 1, 17).Value
'Creates variables relevant to the job type
With Worksheets("JobType")
minHours = CDec(WorksheetFunction.VLookup(jobTypeTemp, jobTypeData, 2))
maxHours = CDec(WorksheetFunction.VLookup(jobTypeTemp, jobTypeData, 3))
minShift = CDec(WorksheetFunction.VLookup(jobTypeTemp, jobTypeData, 5))
maxShift = CDec(WorksheetFunction.VLookup(jobTypeTemp, jobTypeData, 6))
shiftGap = CDec(WorksheetFunction.VLookup(jobTypeTemp, jobTypeData, 7))
End With
这下面有更多代码,但一切正常,在使用动态数据大小之前工作正常。 有效的代码不会更改 jobTypeData 的内容或大小。 我还检查了 VLookup returns 的值,它们都是正确的。我唯一能想到的是它找不到第二个 jobType 但是我已经检查过它们是相同的(没有隐藏的空格)。
答案似乎与 VLookup 使用的方式有关 'approximate match'。
我一直认为,如果 VLookup 是一个选项,它仍然会提供精确匹配,而且因为我有严格的数据验证,所以我从没想过使用近似匹配会是一个问题。然而,事实证明,它不仅有点不可预测,而且实际上也不可靠。
检查后假设“角色名称”比“团队经理”更接近“团队经理”。将其更改为使用 'exact match' 后,一切正常。之前工作的代码也没有更改。 嗯,吸取教训...
当你有一个完全匹配的时候总是使用(不管你有多自信,以我为例):
VLOOKUP(arg1, arg2, arg3, FALSE)
不是:
VLOOKUP(arg1, arg2, arg3)