我是VBA和脚本编写的新手。我能够提取资源并在Excel中创建用户定义的函数,该函数将返回数组的不同计数。当我在Excel的单元格中调用该函数时,该函数正常工作。
现在,我想在宏中引用此函数,以向我提供一个消息框,说明两个不同列的计数。当我尝试使用宏时,出现“类型不匹配”错误。
不知道我在做什么错-任何帮助将不胜感激。
编辑:包括COUNTDISTINCTcol代码。
Sub GalileoCounts()
Dim teachers As Long
Dim students As Long
teachers = COUNTDISTINCTcol("W2:W") 'ERROR HERE for "W2:W"
students = COUNTDISTINCTcol("A2:A") 'ERROR with "A2:A" as well
MsgBox "Teachers: " & teachers & vbNewLine & "Students: " & students,
vbOKOnly, "Galileo Counts"
End Sub
----
Public Function COUNTDISTINCTcol(ByRef rngToCheck As Range) As Variant
Dim colDistinct As Collection
Dim varValues As Variant, varValue As Variant
Dim lngCount As Long, lngRow As Long, lngCol As Long
On Error GoTo ErrorHandler
varValues = rngToCheck.Value
'if rngToCheck is more than 1 cell then
'varValues will be a 2 dimensional array
If IsArray(varValues) Then
Set colDistinct = New Collection
For lngRow = LBound(varValues, 1) To UBound(varValues, 1)
For lngCol = LBound(varValues, 2) To UBound(varValues, 2)
varValue = varValues(lngRow, lngCol)
'ignore blank cells and throw error
'if cell contains an error value
If LenB(varValue) > 0 Then
'if the item already exists then an error will
'be thrown which we want to ignore
On Error Resume Next
colDistinct.Add vbNullString, CStr(varValue)
On Error GoTo ErrorHandler
End If
Next lngCol
Next lngRow
lngCount = colDistinct.Count
Else
If LenB(varValues) > 0 Then
lngCount = 1
End If
End If
COUNTDISTINCTcol = lngCount
Exit Function
ErrorHandler:
COUNTDISTINCTcol = CVErr(xlErrValue)
End Function
最佳答案
在GalileoCounts
中,您正在使用COUNTDISTINCTcol("W2:W")
。这会将String
传递给COUNTDISTINCTcol
,但是COUNTDISTINCTcol
期望使用Range
参数。因此,即使您放置COUNTDISTINCTcol("W:W")
之类的内容也不起作用-它必须是COUNTDISTINCTcol(Range("W:W"))
。
关于excel - VBA:如何在Excel宏内调用用户定义的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43460170/