Vba 我得到类型不匹配错误

Vba 我得到类型不匹配错误,vba,excel,Vba,Excel,我有一份数据表,其中A列包含年份,B列包含月份,C列包含天数,d列包含总数 我正在尝试创建一个函数,该函数从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

我有一份数据表,其中A列包含年份,B列包含月份,C列包含天数,d列包含总数

我正在尝试创建一个函数,该函数从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
函数countMessagesbyDate(xYear为整数,xMonth为整数,XDDAY为整数)为整数
将wsData设置为工作表
最后一排一样长
Dim tMessages作为整数
以年为界
将每个月作为范围
暗淡的rowDay作为范围
将行消息设置为范围
变暗rCell As范围
作为整数的Dim i
Application.ScreenUpdating=False
设置wsJData=thiswoolk.Sheets(“每日报告”)
设置rowYear=wsData.Range(“A1”).End(xlDown).Row
设置rowMonth=wsData.Range(“B1”).End(xlDown).Row
设置rowDay=wsData.Range(“C1”).End(xlDown).Rows
设置rowMessages=wsData.Range(“D1:”).End(xlDown).Rows
tMessages=0
i=0
每年的每个rCell
i=i+1
如果rCell.Value=xYear和rowMonth.Offset(i)=xMonth和rowDay.Offset(i)<天(今天),那么
tMessages=tMessages+rowMessages.Offset(i).Value
如果结束
下一个rCell
countMessagesbyDate=tMessages
端函数
我在尝试设置范围时遇到类型不匹配。你能帮忙吗


提前感谢

您声明此变量:

Dim wsData As Worksheet

但是,您可以设置这个变量:

Set wsJData=thiswoolk.Sheets(“每日报告”)

然后尝试调用Dim'd所需的变量,但问题是它是空的


因此,如果您将
wsJData
更改为
wsData
,您的代码可能会工作。

您声明此变量:

Dim wsData As Worksheet

但是,您可以设置这个变量:

Set wsJData=thiswoolk.Sheets(“每日报告”)

然后尝试调用Dim'd所需的变量,但问题是它是空的

因此,如果您将
wsJData
更改为
wsData
,您的代码可能会工作。

您说过:-

我在尝试设置范围时遇到类型不匹配

您已将
rowYear
声明为范围(
Dim rowYear as range
),但随后为其提供了一个数字而不是范围,因此不匹配<代码>设置行年=wsData.Range(“A1”).End(xlDown)。行将提供行号,而不是范围

要解决此问题,请更改声明:-

Dim rowYear As Long
或更改变量的设置:-

Set rowYear = wsData.Range("A1").End(xlDown).Range
你说:-

我在尝试设置范围时遇到类型不匹配

您已将
rowYear
声明为范围(
Dim rowYear as range
),但随后为其提供了一个数字而不是范围,因此不匹配<代码>设置行年=wsData.Range(“A1”).End(xlDown)。行将提供行号,而不是范围

要解决此问题,请更改声明:-

Dim rowYear As Long
或更改变量的设置:-

Set rowYear = wsData.Range("A1").End(xlDown).Range
一个简单的Countifs()将为您而不是您的UDF执行此操作

如果您非常喜欢使用自定义项,为什么不在自定义项中使用Countifs(),而不是在每个单元格中循环。

一个简单的Countifs()可以代替您的自定义项


如果您非常喜欢使用自定义项,为什么不在自定义项中使用Countifs(),而不是在每个单元格中循环。

请发布错误如果您使用xlDown,我想您会看到很多行。应该这样吗?或者更好一些,比如wsData.Rows(1)?请选择哪一行?将
选项Explicit
置于模块顶部。如果你使用xlDown,我想你会得到很多行。应该这样吗?或者更好一些,比如wsData.Rows(1)?请选择哪一行?将
选项Explicit
置于模块顶部。这很有帮助。在后一种情况下,您可以省略“Range”,谢谢,它修复了错误,但它为返回了值“0”tMessages@daba很高兴我能回答。您的评论对于您来说是一个不同的问题,因为您需要向我们展示您的新代码,并提供有关新问题的更多说明。在后一种情况下,您可以省略“Range”,谢谢,这修复了错误,但它返回的值为“0”tMessages@daba很高兴我能回答。您的评论对于您来说是一个不同的问题,因为您需要向我们展示您的新代码,并对新问题进行更多描述。