Vlookup日期在Excel VBA中

时间:2015-04-27 20:26:31

标签: excel vba excel-vba

我正在使用 3 excel表格。在表单起始页中,从A4列开始的日期下降。对于位于 A11到lastrow 列中的相同日期并偏移3列的宏基金趋势表格,并将值复制到表格&# 34;应计费用" 范围(" C7")开始。宏循环直到拉片("开始页面")范围(" A4")。

问题是指宏在某些情况下没有将值填充到工作表应计费用中。 它没有找到日期。我的代码如下:

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

要过来日期问题我有这个子不知道这是否有效?

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

我现在遇到的问题是,当输入像2015年2月11日这样的日期时,它会切换到2015年11月2日。但它没有发生在所有日期

克服问题。我放置了一个工作表函数来强制日期列到文本。目前正在运作。

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

1 个答案:

答案 0 :(得分:1)

要避免1004错误,可以使用Application.VLookup函数,该函数允许将错误类型作为返回值。使用此方法测试错误,如果没有错误,则返回结果。

要执行此操作,您必须Dim result as Variant,因为(在此示例中)我在result中放置了一个文本/字符串值,以帮助识别错误发生。

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

"工作表中没有打印结果"需要进一步调试。对于任何给定的查找值,您是否已逐步完成代码以确保result符合您的预期?如果没有错误,那么几乎当然发生的是你输入的公式是返回一个空字符串,并且该值被放入单元格中。