0

我有 2 个 excel 工作表 A 和工作表 B。在工作表 AI 中有一个包含员工姓名的命名范围。B 列是空白的。在表 2 中,我有一个员工列表和出勤天数的命名范围。两张表中的员工姓名的顺序不同。我需要将工作表 A 中的名称与工作表 B 进行比较,当匹配时,我需要复制出勤天数并将其放在 B 列中的工作表 A 中。我在 VBA 中寻求帮助

任何帮助表示赞赏

这就是我到目前为止所拥有的

    Sub ADDCLM()
    On Error Resume Next
    Dim Dept_Row As Long
    Dim Dept_Clm As Long
`   Dim table1
    Dim table2
    Dim cl
    table1 = Sheet1.Range("A2:A13")
    table2 = Sheet2.Range("A2:A13")
    Dept_Row = Sheet1.Range("B2").Row
    Dept_Clm = Sheet1.Range("B2").Column
    For Each cl In table1
      Sheet1.Cells(Dept_Row, Dept_Clm) = Application.WorksheetFunction.VLookup(cl, table2, 2, False)
      Dept_Row = Dept_Row + 1
    Next cl
    MsgBox "Done"
    End Sub
4

1 回答 1

0

试试这个,未经测试。使用范围对象而不是变体。您的行/列计数器变量是不必要的/多余的,我将它们删除。您需要将 table2 定义为两列范围才能使用 VLOOKUP 函数并从 B 列返回值。此外,摆脱On Error Resume Next这是一个不好的做法,最好使用错误处理或测试错误条件并重新路由.

Sub ADDCLM()

Dim table1 As Range
Dim table2 As Range
Dim cl As Range
Set table1 = Sheet1.Range("A2:A13")
Set table2 = Sheet2.Range("A2:B13")  '# Modified this to 2 columns
For Each cl In table1
    If Not IsError(Application.Match(cl,table2.columns(1),False) Then
        cl.Offset(0,1) = Application.WorksheetFunction.VLookup(cl, table2, 2, False)
    End If
Next 
MsgBox "Done"
End Sub
于 2013-08-24T15:01:08.393 回答