Excel VBA中的查找date

我正在使用3个Excel表 。 在表格“起始页”中,我有从A4列 开始的 date 。 macrosV向列表基金趋势中查找列A11中所列的相同date,并将其复制到偏移和偏移3列,并将值复制到从范围(“C7”)开始的“累计费用”表中。 macros循环,直到表单中的lastrow(“起始页”)范围(“A4”)。

问题在于,macros在某些情况下并没有将这些值填充到应计费用中。 或者它没有finddate。 我的代码如下:

Sub NetAsset_Value() Dim result As Double Dim Nav_Date As Worksheet Dim fund_Trend As Worksheet Dim lRow As Long Dim i As Long Set Nav_Date = Sheets("Start page") Set fund_Trend = Sheets("Fund Trend") lRow = Sheets("Start page").Cells(Rows.Count, 1).End(xlUp).row For i = 4 To lRow result = Application.WorksheetFunction.VLookup(Nav_Date.Range("A" & i), fund_Trend.Range("A11:C1544"), 3, False) Sheets("Accrued Expenses").Range("C" & i + 3).Value = result Sheets("Accrued Expenses").Range("C" & i + 3).NumberFormat = "0.00" Sheets("Accrued Expenses").Range("C" & i + 3).Style = "Comma" Next i End Sub 

错误陷阱:

 On Error Resume Next result = Application.WorksheetFunction.VLookup(Nav_Date.Range("A" & i), fund_Trend.Range("A11:C1544"), 3, False) If Err.Number = 0 Then Sheets("Accrued Expenses").Range("C" & i + 3).Value = result Sheets("Accrued Expenses").Range("C" & i + 3).NumberFormat = "0.00" Sheets("Accrued Expenses").Range("C" & i + 3).Style = "Comma" End If On Error GoTo 0 

为了结束date问题,我有这个子不知道这是否有效?

 Sub dates() Sheets("Start page").Range("A4", "A50000").NumberFormat = "dd-mm-yyyy" Sheets("Fund Trend").Range("A11", "A50000").NumberFormat = "dd-mm-yyyy" End Sub 

我现在的问题是,当inputdate如11/02/2015切换到2015年2月11日。 但是它并没有发生在所有的date

克服这个问题。 我放置了一个工作表函数强制date列文本。 目前正在工作。

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Sheets("Start page").Range("A4", "A50000").NumberFormat = "@" Sheets("Fund Trend").Range("A11", "A50000").NumberFormat = "@" End Sub 

为了避免1004错误,您可以使用Application.VLookup函数,该函数允许将错误types作为返回值。 使用此方法来testing错误,如果没有错误,则返回结果。

要做到这一点,你必须Dim result as Variant因为(在这个例子中)我在result放置了一个文本/string值来帮助识别错误发生。

 If IsError(Application.Vlookup(Nav_Date.Range("A" & i), fund_Trend.Range("A11:C1544"), 3, False)) Then result = "date not found!" Else result = Application.WorksheetFunction.VLookup(Nav_Date.Range("A" & i), fund_Trend.Range("A11:C1544"), 3, False) End If 

“没有结果打印在工作表”需要进一步的debugging你的一端。 你有没有通过代码,以确保result是你所期望的,对于任何给定的查找值? 如果没有错误,那么几乎肯定会发生的是,您input的公式返回一个空string,并将该值放入单元格中。