我正在尝试编写一个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')
答案 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”)。