【问题标题】:Is it possible to use excel inbuilt function within user defined or custom made function created by VBA?是否可以在 VBA 创建的用户定义或自定义函数中使用 excel 内置函数?
【发布时间】:2017-04-07 19:12:25
【问题描述】:

我正在尝试通过 VBA 在 excel 中创建一个函数,并想知道是否可以在该函数中使用 excel 内置函数。例如,像 Lookup 或 Match 这样的函数。我有 VBA 和公式的解决方案,但有兴趣知道函数是否可以做同样的事情。

我正在尝试创建一个函数,其中 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

【问题讨论】:

  • 答案是“是”,但有一些警告/限制(即,值得注意的是,UDF 通常不允许改变环境)。如果您想要更具体的内容,您可能应该包括您正在尝试做的事情,以及您尝试编写或使用的代码。
  • 我已经添加了代码。在这里让我知道你的想法?
  • 似乎是什么问题?有错误吗?
  • 是的,它不返回任何值。当我通过临时子测试它时,错误点是 Application.Match 函数,其中运行时错误 438“对象不支持此属性或方法
  • 现在代码可以工作了,代码是正确的。 Worksheet.Function 错误。它必须是工作表函数。

标签: excel vba


【解决方案1】:

这是一个使用 MAX()SUM() 的示例:

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

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

List of Worksheet Functions Available to Visual Basic

【讨论】:

  • 谢谢,如何获取不能使用的功能的详细信息?
  • 感谢分享链接。如果我使用 Match 和 Vlookup,我的代码将无法正常工作。
  • @user3200076 工作表函数中应该没有点
猜你喜欢
  • 2015-08-12
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 2018-09-16
  • 1970-01-01
相关资源
最近更新 更多