我正在尝试创建一个模块,以逐年从另一个工作表上的巨型电子表格中提取数据。除了将年份与用户输入的年份匹配的那部分外,代码的所有部分均有效。
这是我定义用户输入的方式以及尝试编写if语句的方式。
Dim y As variant
y = InputBox("Input year here")
If Year(RptSht.Cells(i, 2)) = y
这时我得到了一个类型不匹配(我尝试将y设置为整数)。同样作为笔记,我可以使用
Year(RptSht.Cells(i, 2))
要获取一个值,它与y
不匹配。任何帮助将不胜感激。
答案 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
因此,i
是5
,参考单元格是B5
。 IsDate()
检查单元格是否为日期。