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

时间:2018-07-01 19:35:53

标签: excel vba excel-vba

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

我的代码不断出现错误。

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=(0); DataItem=null; target element is 'EasingColorKeyFrame' (HashCode=8140857); target property is 'Value' (type 'Color')

2 个答案:

答案 0 :(得分:1)

IsError不适用于Application.WorksheetFunction.VLookup或WorksheetFunction.VLookup,仅适用于Application.VLookup。

返回Application更快,更轻松。将一次匹配到变体类型变量,然后对其进行测试以供使用。

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

请注意在两个地方明显滥用了 wkb wks 。我看不到在一个工作表中查找值,然后测试返回的值,然后使用测试结果在另一个工作表中查找相同值的意义。

答案 1 :(得分:-1)

您可以使用以下代码:

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检查错误时,程序流可以根据错误立即从子程序返回。您可以在子代码中使用on错误来防止这种情况,但这只能处理第一个错误。通过将错误处理委托给一个函数,您可以重复处理循环中的错误。

我假设您想使用wkb.Range(“ E:T”)代替wks.Range(“ E:T”)。