Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在VBA创建的用户定义或自定义函数中使用excel内置函数?_Excel_Vba - Fatal编程技术网

是否可以在VBA创建的用户定义或自定义函数中使用excel内置函数?

是否可以在VBA创建的用户定义或自定义函数中使用excel内置函数?,excel,vba,Excel,Vba,我试图通过VBA在excel中创建一个函数,不知道excel内置函数是否可以在该函数中使用。例如,Lookup或Match等函数。我有使用VBA和formula的解决方案,但我想知道函数是否也可以这样做 我试图创建一个函数,其中VLookup应该只返回第一个找到的项的值 'function which can return the Vlookup value only for 1st found value Function SLOOKUP(Pvalue As Range, Rng As Ran

我试图通过VBA在excel中创建一个函数,不知道excel内置函数是否可以在该函数中使用。例如,Lookup或Match等函数。我有使用VBA和formula的解决方案,但我想知道函数是否也可以这样做

我试图创建一个函数,其中VLookup应该只返回第一个找到的项的值

'function which can return the Vlookup value only for 1st found value
Function SLOOKUP(Pvalue As Range, Rng As Range, Rng1 As Range, pIndex As Long)

    Dim Cvalue As Variant
    Dim Mvalue As Long
    Dim Uvalue As Long
    Dim Result As Variant
    Result = ""

Cvalue = Pvalue.Value
Mvalue = Application.Worksheet.Function.Match(Cvalue, Rng, -1)
Uvalue = Pvalue.Row

If Mvalue = Uvalue Then
Result = Application.Worksheet.Function.VLookup(Cvalue, Rng1, pIndex, 0)
Else
Result = 0
End If

SLOOKUP = Result

End Function

下面是一个使用MAX()和SUM()的示例:

请注意,并非所有内置工作表函数都可以在VBA中这样使用。以下是可用的:


答案是“是”,但有一些警告/限制(例如,通常不允许UDF改变环境)。如果您希望更具体,您可能应该包括您正在尝试做的事情,以及您尝试编写或使用的代码。我已经添加了代码。让我知道你的想法?有什么问题吗?是否有错误?是的,它不返回任何值。当我通过temporary sub测试它时,错误点是Application.Match函数,其中运行时错误438“对象不支持此属性或方法。现在代码正常,代码正确。工作表。函数错误。它必须是worksheetfunction。谢谢,我如何才能获得无法使用的功能的详细信息?感谢共享链接。如果我使用Match和Vlookup,我的代码就无法工作。@user3200076工作表函数中应该没有点
Public Function whatever(rin As Range) As Variant
    Dim mx As Variant
    mx = Application.WorksheetFunction.Max(rin)
    whatever = Application.WorksheetFunction.Sum(rin) / mx
End Function