我有两本工作簿,第一本工作簿供员工使用,可生成该周的报告。第二个工作簿是包含制作这些报告所需的所有数据的工作簿。
我要做的是找到一周开始的日期并在第二个工作簿上执行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
答案 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)