Excel VBA – 公式写入错误

我正在尝试在我的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 

该function的范围来自不同的工作表。 我如何在VBA中编写它?

这是它的function:

 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 

GetUniqueCount的名称没有工作表函数。 如果这是你的代码中的一个函数,那么调用它的方法将是这样的:

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

这段代码假定你的函数和调用过程在同一个代码表上,或者声明为public。 它必须有两个参数,第一个参数必须是一个范围,第二个是与check相同的数据types。 如果你没有声明check (这不是一个好主意),那么它的数据types将是Variant。

您的代码中存在其他可能的错误, 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