同一工作簿中不同工作表上Vlookup的VBA代码

同一工作簿中不同工作表上Vlookup的VBA代码,vba,excel,Vba,Excel,我正在尝试编写一个vba脚本,允许我将值从工作表(3)粘贴到不同的工作表(I)-并将其粘贴到工作表(I)上的范围“R2”-我还希望它转到工作表(I)上M列中值的末尾[如果可能]。我基本上想浏览工作簿上所有不同的“I”表。工作表(3)包含需要复制到所有其他“i”工作表上的所有数据 我在下面的代码中不断出现错误 Sub CopyTableau1Data() Dim wka As Worksheet Dim wkb As Worksheet ShtCount = Activ

我正在尝试编写一个vba脚本,允许我将值从工作表(3)粘贴到不同的工作表(I)-并将其粘贴到工作表(I)上的范围“R2”-我还希望它转到工作表(I)上M列中值的末尾[如果可能]。我基本上想浏览工作簿上所有不同的“I”表。工作表(3)包含需要复制到所有其他“i”工作表上的所有数据

我在下面的代码中不断出现错误

Sub CopyTableau1Data()

    Dim wka As Worksheet
    Dim wkb As Worksheet

    ShtCount = ActiveWorkbook.Sheets.Count

    For i = 9 To ShtCount

    With ThisWorkbook
        Set wka = .Sheets(i)
        Set wkb = .Sheets(3)
    End With

    Worksheets(i).Activate

    If IsError(Application.WorksheetFunction.VLookup(wka.Range("M2"), wkb.Range("E:T"), 14, 0)) Then
            wka.Range("R2").Value = ""
        Else
            wka.Range("R2").Value = Application.WorksheetFunction.VLookup(wka.Range("M2"), wks.Range("E:T"), 14, 0)
        End If

    Next i

End Sub

iSeries不与Application.WorksheetFunction.VLookup或WorksheetFunction.VLookup一起使用,仅与Application.VLookup一起使用

返回应用程序更快更容易。只需匹配一次变量类型,然后测试它是否可用

dim am as variant

'are you sure you want wkb and not wks here?
am = Application.match(wka.Range("M2"), wkb.Range("E:E"), 0)

If IsError(am) Then
    wka.Range("R2") = vbnullstring
Else
    'are you sure you want wks and not wkb here?
    wka.Range("R2") = wks.cells(am, "R").value
End If

注意在两个地方明显误用了wkbwks。我不认为在一个工作表中查找一个值,测试返回的值,然后使用测试结果在另一个工作表中查找相同的值有什么意义。

您可以使用以下代码:

Sub CopyTableau1Data()
Dim wka As Worksheet
Dim wkb As Worksheet, i As Integer
    ShtCount = ActiveWorkbook.Sheets.Count

    For i = 9 To ShtCount

    With ThisWorkbook
        Set wka = .Sheets(i)
        Set wkb = .Sheets(3)
    End With

    Worksheets(i).Activate
    wka.Range("R2") = aVL(i)
Next i
End Sub

Function aVL(ByVal wsno As Integer) As String
On Error GoTo errhandler:
    aVL =                 
Application.WorksheetFunction.VLookup(ActiveWorkbook.Worksheets(wsno).Range("M2"), 
ActiveWorkbook.Worksheets(3).Range("E:T"), 14, False)
errhandler:
    aVL = ""
End Function
当您试图通过isError检查错误时,程序流可以根据错误立即从sub返回。您可以在sub中使用on error来防止出现这种情况,但这只会处理第一个错误。通过将错误处理委托给函数,可以重复处理循环中的错误


我假设您想使用wkb.Range(“E:T”)而不是wks.Range(“E:T”)。

您会收到什么错误消息,以及代码中断在哪一行(如果有)?