簡體   English   中英

自定義函數中的Excel VBA WorksheetFunction(不是子函數)

[英]Excel VBA WorksheetFunction in custom function (not sub)

據我所知,Excel不會讓您在vba函數中使用WorksheetFunctions(不是SUB或SUBROUTINE)。 是否可以在FUNCTION中使用WorksheetFunctions? 如果不是,是否有簡單的替代方法可以獲得與COUNTA函數相同的結果? 有誰知道為什么WorksheetFunctions似乎不能與自定義函數相處?

Function CountIfsFast(range1 As range, val1, Optional range2 As range, Optional val2)
    rangesize = WorksheetFunction.CountA(range1)
    range1array = RangetoArray(range1)
    range2array = RangetoArray(range2)
    matchcount = 0
    For i = 0 To rangesize
        If range1array(i) = val1 Then
            If range2array(i) = val2 Then
                matchcount = matchcount + 1
            End If
        End If
    Next i
    CountIfsFast = matchcount
End Function

更新:我發現了問題所在。 請參閱下面的答案。

此“自定義”函數返回的值與內置CountA函數相同(至少在2007年)。 您必須在傳遞函數的范圍內提供一些詳細信息,以幫助我們進行調試。

Function counta2(rng As Range)
     Dim i As Integer

     i = Application.WorksheetFunction.CountA(rng)

     counta2 = i

End Function

您可以像這樣使用它:= counta2(C1:C8)

這也適用於我:(Excel 2010)

Public Function fubu(range1 As Range) As Variant
    Dim rangesize As Variant

    rangesize = WorksheetFunction.CountA(range1)

    fubu = rangesize
End Function

嘗試按字面意義進行剪切和粘貼:絕對不要更改,然后從圖紙公式中調用它。

我必須對其進行修改,以擺脫不包含的RangeToArray函數。 請注意,我更改了,以指定其返回值As Long的數據類型。 我還聲明了特定數據類型的變量。 這將是一個開始的好習慣:)

屏幕截圖

Function CountIfsFast(range1 As Range, val1, Optional range2 As Range, Optional val2) As Long
    Dim range1Array As Variant
    Dim range2Array As Variant
    Dim rangeSize As Long
    Dim matchCount As Long
    Dim i as Long

    rangeSize = WorksheetFunction.CountA(range1)
    range1Array = range1
    range2Array = range2
    matchCount = 0
    For i = 1 To rangeSize
        If range1Array(i, 1) = val1 Then
            If range2Array(i, 1) = val2 Then
               matchCount = matchCount + 1
            End If
        End If
    Next i
    CountIfsFast = matchCount
End Function

我發現了問題所在。 我認為這是對函數的限制,因為就我而言,我可以在子例程中使用WorksheetFunctions,但不能在函數中使用。 事實證明,這與它無關。 進一步研究50290錯誤,我在另一個論壇上偶然發現了這個錯誤:

“我碰到了這個-它是一個Microsoft錯誤。您需要在您的一種表單上或其任何內容(按鈕,圖片,標簽等)上找到有問題的對象並將其刪除。”

我做了一些實驗,發現我的函數集合中的某件事導致當我調用WorksheetFunctions時Excel表現異常。 為了使它們重新工作,我必須完全關閉Excel並啟動一個新的工作簿。 當我這樣做時,WorksheetFunctions可以正常工作。 奇怪。

暫無
暫無

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

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