[英]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.