首页 > 解决方案 > 每周报告的完整vlookup

问题描述

我完成了一份每周报告,您可以在其中针对几个不同的报告运行多个 vlookup。我希望能够选择文件来运行 vlookup,因为它会每周更改。以下是我到目前为止所拥有的,但我不断收到运行时错误,当它运行时,它会为每一行查找相同的值。最后,我是 VBA 的初学者,所以如果我犯了一些新手错误,我提前道歉。

Sub VlookOne()
Dim filenm As Variant
Dim MyBook1 As Workbook
Dim MyBook2 As Workbook
Dim myTableArray
Dim rowcnt
Dim beginrow
Dim lastrow

beginrow = 4
lastrow = 200
Set MyBook1 = ThisWorkbook
filenm = Application.GetOpenFilename
'the workbook im trying to run the vlookup against
Set MyBook2 = Workbooks.Open(filenm)
    With MyBook2
        Set myTableArray = MyBook2.Worksheets("Sheet1").Range("A4:M300")
    End With

    For rowcnt = beginrow To lastrow
    MyBook1.Activate
    Range("M4").Select
    ActiveCell.Value = Application.VLookup(Range("A4"), myTableArray, 13, False)
    ActiveCell.Offset(1, 0).Select
    Next rowcnt

End Sub

标签: excelvbavlookup

解决方案


您应该完全限定您的范围引用以避免隐式的活动表引用。删除您的 ActiveCell 和 .Select/.Activate 行,因为它们会增加开销并减慢您的代码。使用您的行变量来引用循环中的当前行并避免像当前那样覆盖:

With MyBook1.Worksheets("Sheet1")            '<==change as required   
    For rowcnt = beginrow To lastRow  
        .Cells(RowCount, "M") = Application.VLookup(.Cells(RowCount, "A"), myTableArray, 13, False)   
    Next rowcnt   
End With

如果找不到查找匹配,您可能还想添加错误处理。


推荐阅读