我认为这个答案可以分为三个部分:正确引用Range 对象的属性、检索最后一行数据以及使用循环
正确引用范围的值:
我注意到的第一件事是您试图将 Date 变量分配为 Range 对象。
这一行:
Nav_date = Sheets("Start page").Range("A4")
应该是:
Nav_date = Sheets("Start page").Range("A4").Value
Range 是一个具有属性和方法的对象。您必须明确引用 what 您想要获取的范围。它的价值,它的单元格地址,等等。
同样,这个不正确的语法在下面重复。行:
Sheets("Acurred Expenses").Range("C7") = equity
应该是:
Sheets("Acurred Expenses").Range("C7").Value = equity
编辑:根据 cmets whytheq 提出了默认属性。从技术上讲,代码Sheets("Acurred Expenses").Range("C7") = equity 是不不正确的,并且会起作用,因为范围的默认属性是Value。我倾向于更明确,但这是我个人的偏好,所以我总是使用Range.Value,所以没有歧义。无论哪种方式都应该有效!
检索工作表的最后一行
要查找工作表中最后使用的数据行,我们可以从工作簿底部开始“查找”直到找到第一行(这将对应于工作表中数据的最后一行)。
此代码与激活 A 列中的最后一个单元格并按下 CTRL+Shit+↑
相同
Sub LastRow()
Dim lRow As Long
lRow = Cells(Rows.Count, 1).End(xlUp).Row
Debug.Print lRow
End Sub
重申一下,这从最底行开始,一直向上,返回它停止的行号。这对应于 A 列中输入的最后一个值。如果您的数据位于不同的列中,您可能需要更改 A。
循环
最后,我们可以把我们学到的所有东西放在一起。在您拥有与您的数据集中的最后一行相对应的 lRow 之后,我们可以像这样执行 VLOOKUP 的查找:
Sub equity()
Dim Nav_date As Date
Dim equity As Integer
Dim lRow As Long
Dim i As Long
lRow = Sheets("Start page").Cells(Rows.Count, 1).End(xlUp).Row
For i = 4 To lRow 'Begin in Row 4 of the "Start page" sheet
Nav_date = Sheets("Start page").Range("A" & i).Value
'Tell code to continue even if error occurs
On Error Resume Next
equity = Application.WorksheetFunction.VLookup(Nav_date, _
Worksheets("Fund Trend").Range("A11:C12"), 3, False)
'Check the results of the VLOOKUP, an error number of 0 means no error
If Err.Number = 0 Then
'Here I use i+3 because the data started in row 7 and I assume
'it will always be offset by 3 from the "Start Page"
Sheets("Acurred Expenses").Range("C" & i + 3).Value = equity
End If
'Return to normal error handling
On Error GoTo 0
Next i
End Sub