year()函数有问题

时间:2019-07-12 13:51:40

标签: excel vba

我正在尝试创建一个模块,以逐年从另一个工作表上的巨型电子表格中提取数据。除了将年份与用户输入的年份匹配的那部分外,代码的所有部分均有效。

这是我定义用户输入的方式以及尝试编写if语句的方式。

Dim y As variant
y = InputBox("Input year here")

If Year(RptSht.Cells(i, 2)) = y

这时我得到了一个类型不匹配(我尝试将y设置为整数)。同样作为笔记,我可以使用

Year(RptSht.Cells(i, 2)) 

要获取一个值,它与y不匹配。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

这是处理此问题的一种方法:

Sub gotimm()
    Dim y As Long, RptSht As Worksheet, i As Long

    y = Application.InputBox(Prompt:="Input year here", Type:=1)
    Set RptSht = ActiveSheet
    i = 1

    With RptSht
        If IsDate(.Cells(i, 2)) Then
            If .Cells(i, 2) = y Then
                MsgBox "match"
            Else
                MsgBox "nomatch"
            End If
        Else
            MsgBox "no date in cell " & .Cells(i, 2).Address
        End If
    End With
End Sub

答案 1 :(得分:2)

If Year(RptSht.Cells(i,2)) = y

这件事太多了。拆分。

首先,您要在(i, 2)处获得单元格:

Dim yearCellValue As Variant
yearCellValue = RptSht.Cells(i, 2)

现在,我们不能仅假设yearCellValue是有效日期。我们必须知道,否则,如果假设有任何问题,我们很可能会遇到类型不匹配错误。使用IsDate函数来确保您正在查看Date值:

If IsDate(yearCellValue) Then

End If

在该条件块中,Year(yearCellValue)是安全的。在它外面,不是。

If IsDate(yearCellValue) Then
    If Year(yearCellValue) = y Then
        '...
    End If
End If

问题是,我们也不知道y还是有效值。

Dim y As variant
y = InputBox("Input year here")
If Not IsNumeric(y) Then Exit Sub 'bail out, we can't go any further.

答案 2 :(得分:1)

我想问题是未分配i(i,2)不是日期。试试这个:

Sub TestMe()

    Dim y As Variant
    Dim i As Long

    y = InputBox("Input year here")
    i = 5

    If IsDate(Worksheets(1).Cells(i, 2)) Then
        If Year(Worksheets(1).Cells(i, 2)) = y Then
             'Logic here
        End If
    End If

End Sub

因此,i5,参考单元格是B5IsDate()检查单元格是否为日期。