在不同工作簿的单元格中查找日期,然后将行号作为变量返回

时间:2015-09-25 07:56:59

标签: excel vba excel-vba

我有两本工作簿,第一本工作簿供员工使用,可生成该周的报告。第二个工作簿是包含制作这些报告所需的所有数据的工作簿。

我要做的是找到一周开始的日期并在第二个工作簿上执行VLookup以查找周开始日期并将找到的单元格的“行号”作为变量返回用于各种其他事情。

当前代码返回运行时错误(424):对象必需

这是我到目前为止所做的:

Sub SourceFileLookup()

    Dim lookFor As Range
    Dim srchRange As Range

    Dim book2 As Workbook

    Dim book2Name As String
    book2Name = "Report_Data.xlsx"    ' Name of Source File

    Set book2 = Workbooks(book2Name)

    strdate = GetWeekStartDate(Date)
    fdate = Format(strdate, "dd/mm/yy")


    Set lookFor = fdate     ' value to find
    Set srchRange = book2.Sheets("TB").Range("B:B")    ' Search Range

    lookFor = Application.VLookup(lookFor, srchRange, 1, False)

    Exit Sub
End Sub

Function GetWeekStartDate(ByVal strdate, Optional ByVal lngStartDay As Long = 2) As String
    GetWeekStartDate = DateAdd("d", _
                   -Weekday(CDate(strdate), lngStartDay) + 1, CDate(strdate))
End Function

3 个答案:

答案 0 :(得分:1)

Vlookup返回指定单元格的值而不是地址。使用MATCH获取匹配日期的行

Application.Match(lookFor, srchRange, 0)

然后您可以根据需要使用该行

答案 1 :(得分:1)

您只能设置对象。您不会使用Set为变量分配日期,变量应为Date类型或Variant。事实上,GetWeekStartDate函数返回一个日期类型值,但是你将它作为字符串来回折腾,然后尝试将Range对象设置为它。

Sub SourceFileLookup()

    Dim fDate As Date
    Dim rw As Long
    Dim srchRange As Range
    Dim book2Name As String, book2 As Workbook

    book2Name = "Report_Data.xlsx"    ' Name of Source File
    Set book2 = Workbooks(book2Name)

    fDate = GetWeekStartDate(Date)
    Set srchRange = book2.Sheets("TB").Range("B:B")    ' Search Range

    If Application.CountIf(srchRange, fDate) Then
        rw = Application.Match(CLng(fDate), srchRange, 0)

        'rw contains the Row Number of the date
        'you need to do something with rw
    Else
        MsgBox Format(fDate, "dd/mm/yyyy") & " not found."
    End If

End Sub

您声明要将行号作为变量返回MATCH function是最佳选择,但最好在检索行号之前确保它与COUNTIF function一致。

在检索行号后,如何处理行号几乎没有。在上文中,它存储在long类型变量rw

答案 2 :(得分:-1)

set lookFor = Application.VLookup(lookFor, srchRange, 1, False)