仍然运行时错误1004'无法获取WorksheetFunction类(VBA)的VLookup属性

问题描述 投票:0回答:1

我收到此错误,并尝试解决许多问题,但是我不知道为什么会发生此错误。您能帮我解决这个问题吗?在这段代码中,我两次使用VLookup函数相同的源,只是工作表名称和列不同。另一个人可以编译此代码,并且没有任何错误。

我正在做,如果工作表“ ImportData2”的第Q列的显示结果为VLookup,则工作表“ ImportData2”的B列的VLookup项目与工作表“ Noallocate”的A列匹配

enter image description here

enter image description here

收到此错误

enter image description here

源代码:

 'Vlook up function no import
    Dim Vrow1 As Long
    Dim myLookupValue1 As String
    Dim myFirstColumn1 As Long
    Dim myLastColumn1 As Long
    Dim myColumnIndex1 As Long
    Dim myFirstRow1 As Long
    Dim myLastRow1 As Long
    Dim myVLookupResult1 As String
    Dim myTableArray1 As Range
    For Vrow1 = 2 To 99999
        myLookupValue1 = Workbooks("ExpenseData.xlsm").Worksheets("ImportData2").Range("B" & Vrow).Value
        myFirstColumn1 = 1
        myLastColumn1 = 2
        myColumnIndex1 = 2
        myFirstRow1 = 2
        myLastRow1 = Workbooks("ExpenseData.xlsm").Worksheets("Noallocate").Range("b1").End(xlDown).Row

        With Workbooks("ExpenseData.xlsm").Worksheets("Noallocate")
            Set myTableArray1 = .Range(.Cells(myFirstRow1, myFirstColumn1), .Cells(myLastRow1, myLastColumn1))
        End With
      myVLookupResult1 = WorksheetFunction.VLookup(myLookupValue1, myTableArray1, myColumnIndex1, False)  'xxx
      Workbooks("ExpenseData.xlsm").Worksheets("ImportData").Range("Q" & Vrow).Value = myVLookupResult1 'xxx
   Next 'end function no import
excel vba
1个回答
0
投票

请尝试下一个代码。将“ Option Explicit”放在模块顶部是一个好习惯。这将使您必须声明所有变量。看起来,您的代码使用Vrow1进行了迭代,但是在您使用Vrow的循环中...我只是在尝试使您的代码更友好之后才发现它。使用大变量名而不是12是不好的。通过查看代码,这只会使代码更难于理解。简而言之,很容易理解和调试:

Sub testVlookup()
 Dim Wb As Workbook, Vrow1 As Long, lastRDat As Long, wsNoall As Worksheet
 Dim wsImpD2 As Worksheet, myLookupValue1 As String, myLastRow1 As Long
 Dim myVLookupResult1 As String, myTableArray1 As Range

    Set Wb = Workbooks("ExpenseDataMcframe.xlsm")
    Set wsNoall = Wb.Worksheets("Noallocate")
    Set wsImpD2 = Wb.Worksheets("ImportData2")
    myLastRow1 = wsNoall.Range("b" & Rows.count).End(xlUp).Row
    lastRDat = wsImpD2.Range("B" & Rows.count).End(xlUp).Row
    For Vrow1 = 2 To lastRDat
        myLookupValue1 = wsImpD2.Range("B" & Vrow1).value

        Set myTableArray1 = wsNoall.Range(wsNoall.Cells(2, 1), wsNoall.Cells(myLastRow1, 2))

        myVLookupResult1 = WorksheetFunction.VLookup(myLookupValue1, myTableArray1, 2, False)  'xxx
        Wb.Worksheets("ImportData").Range("Q" & Vrow1).value = myVLookupResult1 'xxx
   Next
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.