簡體   English   中英

我收到類型不匹配錯誤

[英]I get Type Mismatch error

我有一個數據表,其中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

嘗試設置范圍時出現類型不匹配的情況。 你能幫忙嗎?

提前致謝

您說:-

嘗試設置范圍時出現類型不匹配的情況

您已將rowYear聲明為范圍( Dim rowYear As Range ),但隨后Dim rowYear As Range提供了一個數字,而不是范圍,因此不匹配。 Set rowYear = wsData.Range("A1").End(xlDown).Row將提供行號而不是范圍。

要解決此問題,請更改聲明:-

Dim rowYear As Long

或更改變量的設置:-

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

您聲明此變量:

Dim wsData As Worksheet

但是然后您設置此變量:

Set wsJData = ThisWorkbook.Sheets("daily_report")

然后,您嘗試調用Dim變量,但問題是它為空。

因此,如果將wsJData更改為wsData ,則代碼可能會起作用。

一個簡單的Countifs()可以代替您的UDF來完成。

如果您非常熱衷於使用UDF,為什么不在UDF中使用Countifs()而不是遍歷每個單元格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM