簡體   English   中英

Excel VBA-公式編寫錯誤

[英]Excel VBA - Formula writing error

我正在嘗試將公式放入我的vba代碼中,但里面出現錯誤。 請查看代碼,並分享您的想法。

這是我用VBA代碼編寫的excel函數:

GetUniqueCount(Range,Value)

這是試圖利用它的VBA代碼:

Sheets("sheet2").Activate
        With ThisWorkbook.Sheets("sheet2").UsedRange
            lastrow = .Rows(.Rows.Count).Row
        End With

    For i = 14 To lastrow
        check = Range("h" & i).Value
        If check <> "" Then
         Range("I" & i).Value = WorksheetFunction.GetUniqueCount(sheet1!.Range("A1:B100"), check)
        Else
        Range("I" & i).Value = ""
    Next

該功能的范圍來自另一張紙。 如何在VBA中編寫它?

這是它的功能:

Function GetUniqueCount(Rng1 As Range, Lookup As String) As Long
Dim x, dict
Dim i As Long, cnt As Long
Set dict = CreateObject("Scripting.Dictionary")
x = Rng1.Value
For i = 1 To UBound(x, 1)
    If x(i, 1) = Lookup Then
        dict.Item(x(i, 1) & x(i, 2)) = ""
    End If
Next i
GetUniqueCount = dict.Count
End Function

您的代碼中還有其他可能的錯誤,不合格的Range等。

由於您的Function GetUniqueCount不是Excel在WorksheetFunction內置的,而是您自己的UDF ,因此您不需要使用WorksheetFunction.GetUniqueCount調用它,而只需使用GetUniqueCount即可調用它。

請嘗試以下代碼:

Option Explicit

Sub Test()

Dim LastRow As Long, i As Long
Dim check As String

    With ThisWorkbook.Worksheets("sheet2")
        LastRow = .Cells(.Rows.Count, "I").End(xlUp).Row

        Dim Rng As Range
        Set Rng = Worksheets("sheet1").Range("A1:B100")

        For i = 14 To LastRow
            check = .Range("H" & i).Value
            If check <> "" Then
                .Range("I" & i).Value = GetUniqueCount(Rng, check)
            Else
                .Range("I" & i).Value = ""
            End If
        Next i
    End With

End Sub

沒有名為GetUniqueCount的工作表函數。 如果這是您的代碼中包含的函數,則調用該函數的方式應為:

Range("I" & i).Value = GetUniqueCount("Sheet1".Range("A1:B100"), check)

該代碼假定您的函數與調用過程位於同一代碼表中,或者被聲明為public。 它必須有兩個參數,其中第一個必須是范圍,第二個必須具有與check相同的數據類型。 如果您未聲明check (這不是一個好主意),則其數據類型將為Variant。

暫無
暫無

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

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