我收到Type Mismatch错误

时间:2016-06-10 12:38:03

标签: excel vba excel-vba

我的数据表包含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

尝试设置范围时,我得到类型不匹配。你能帮忙吗?

提前致谢

3 个答案:

答案 0 :(得分:2)

你说: -

  

尝试设置范围

时出现类型不匹配

您已将rowYear声明为范围(Dim rowYear As Range),但随后提供的数字不是范围,因此不匹配。 Set rowYear = wsData.Range("A1").End(xlDown).Row将提供行号而不是范围。

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

Dim rowYear As Long

或更改变量的设置: -

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

答案 1 :(得分:1)

您声明此变量:

Dim wsData As Worksheet

但是你设置了这个变量:

Set wsJData = ThisWorkbook.Sheets("daily_report")

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

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

答案 2 :(得分:1)

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

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