我得到types不匹配错误

我有一个数据表,其中包含在A列中的年份,在B列中的月份,在C列中的date和在d中的总计数

我正在尝试创build一个从d列中总结今天月份统计信息的函数

Function countMessagesbyDate(xYear As Integer, xMonth As Integer, xDay As Integer) As Integer Dim wsData As Worksheet Dim LastRow As Long Dim tMessages As Integer Dim rowYear As Range Dim rowMonth As Range Dim rowDay As Range Dim rowMessages As Range Dim rCell As Range Dim i As Integer Application.ScreenUpdating = False Set wsJData = ThisWorkbook.Sheets("daily_report") Set rowYear = wsData.Range("A1").End(xlDown).Row Set rowMonth = wsData.Range("B1").End(xlDown).Row Set rowDay = wsData.Range("C1").End(xlDown).Rows Set rowMessages = wsData.Range("D1:").End(xlDown).Rows tMessages = 0 i = 0 For Each rCell In rowYear i = i + 1 If rCell.Value = xYear And rowMonth.Offset(i) = xMonth And rowDay.Offset(i) < Day(Today) Then tMessages = tMessages + rowMessages.Offset(i).Value End If Next rCell countMessagesbyDate = tMessages End Function 

尝试设置范围时出现types错配。 你能帮忙吗?

提前致谢

你说: –

尝试设置范围时出现types错配

你已经声明rowYear作为一个范围( Dim rowYear As Range ),但是然后提供了一个数字,而不是一个范围,因此不匹配。 Set rowYear = wsData.Range("A1").End(xlDown).Row将提供行号而不是范围。

要解决这个问题,要么改变声明: –

 Dim rowYear As Long 

或更改variables的设置: –

 Set rowYear = wsData.Range("A1").End(xlDown).Range 

你声明这个variables:

Dim wsData As Worksheet

但是然后你设置这个variables:

Set wsJData = ThisWorkbook.Sheets("daily_report")

然后你试着调用你Dim的variables,但问题是它是空的。

所以如果你把wsJData wsData ,你的代码可能会工作。

一个简单的Countifs()将为你做,而不是你的UDF。

如果你非常热衷于使用UDF,为什么不在你的UDF中使用Countifs()而不是循环遍历每个单元格。