【发布时间】:2021-07-12 20:57:46
【问题描述】:
我的 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 返回的值,它们都是正确的。我唯一能想到的是它找不到第二个jobType,但是我检查过它们是相同的(没有隐藏空格)。
【问题讨论】:
-
失败怎么办?有什么错误?对我来说效果很好。我怀疑
CurrentRegion没有返回你想要的。在For行上放一个断点,然后在即时窗口中输入?jobTypeData.Address,看看你得到了什么。 -
我刚刚尝试过,它返回的正是预期的内容,第一次和第二次循环结束。错误是 1004 运行时错误“应用程序定义或对象定义错误”。错误发生在 VLookup 处,我在第一个和第二个 VLookup 处设置了断点,第一次通过没有问题,第二次通过,尝试运行第一个 VLookup 后出现上述错误
-
vlookup后还有代码吗?
-
后面有很多代码(循环中还有 118 行),但我不明白的是,它不仅在使用 CurrentRegion 之前有效,而且 CurrentRegion 没有改变(正如我之前的评论检查 .Address 所证明的那样),显示的代码中使用的值在整个其余部分都没有改变,仅用于数学方程来改变完全独立的非交互工作表上的内容。而且因为它第一次也有效,老实说我很困惑。
-
我认为切换到动态范围只是一个巧合。除非您告诉我您可以将其更改回静态范围并且它可以工作。我认为其他事情发生了变化,而您没有意识到。您能否将 VLOOKUP 公式放在工作表的备用单元格中并查看它是否有效?
标签: excel vba for-loop vlookup