【发布时间】:2019-05-31 05:35:57
【问题描述】:
我正在运行一个基本的 VLOOKUP 来获取员工的电子邮件地址。
但是,当查找值输入数组中不存在的员工姓名时,会引发错误。
我添加了“On Error Resume Next”,但这只是导致其余电子邮件地址成为最后遇到的电子邮件地址,而不是继续搜索并将当前员工用作搜索变量。
我想要的是当数组中不存在搜索变量ProjectManName 时,跳过该行,然后照常继续搜索。然后我会去手动填写空的电子邮件地址。
Dim myLookupValue As Range
Dim strResult As String
Dim lngLastRow As Long
Dim lngLoop As Long
Dim ProjectManName As String
Set myLookupValue = Worksheets("Employees").Range("A1", Worksheets("Employees").Range("B1").End(xlDown))
With Worksheets("Project Summary")
lngLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For lngLoop = 2 To lngLastRow
On Error Resume Next
ProjectManName = .Cells(lngLoop, 1).Value
strResult = Application.WorksheetFunction.VLookup(ProjectManName, myLookupValue, 2, False)
Range("K" & lngLoop).Value = strResult
ActiveCell.Offset(1, 0).Select
Next
End With
另外,对于 myLookupValue,我是否需要 Worksheets("Employees") 的第二个实例?当我不这样做时,它也会出现错误,因为范围中的第二个单元格查看的是当前工作表而不是员工工作表。
最后,如何将Range("K" & lngLoop).Value 中的“K”替换为第一个空列?
【问题讨论】:
-
删除
.WorksheetFunction部分,它将允许通过。 -
您需要找到最后一列,以便可以替换您范围内的“K”。我建议使用
Cells()而不是Range(),因为您可以使用lc = sheets("project summary").cells(1, sheets("project summary").columns.count).end(xltoleft).column中的数字,其中单元格中的1是第一行(通常是标题),“lc”代表最后一列。单元格引用将是Cells(ingLoop, lc) -
@ScottCraner 我按照你说的做了,但仍然得到 运行时错误 '13': Type mismatch
-
见下面 Mathieu 的回答,他告诉你为什么以及如何解决