【问题标题】:Custom Function Disable in Excel在 Excel 中禁用自定义函数
【发布时间】:2018-08-29 16:22:50
【问题描述】:

我创建了一个自定义函数,我在 VBA 的另一个模块中明确使用该函数。函数看起来像这样:

Function Coverts(ByVal inputString As String) As String
   'Coverts code here
End Function

它在 VBA 和 Excel UI 中都能正常工作。但是,我不希望它工作或出现在 Excel UI 中,因为我只想在 VBA 中使用它。有没有办法做到这一点?

谢谢

【问题讨论】:

标签: vba excel


【解决方案1】:

Option Private Module

在包含你的函数的模块的顶部。


来自MSDN

当一个模块包含Option Private Module时,公共部分,例如,在模块级别声明的变量、对象和用户定义的类型,在包含该模块的项目中仍然可用,但它们对其他应用程序不可用或项目。

【讨论】:

  • 没问题,毕竟这是一个协作的努力:)
  • @Rawrplus - 如果我能与你分享其中一张选票,我肯定会......
【解决方案2】:

您可以将关键字 Public 或 Private 添加到您的函数、subs 或全局变量以进行指定。

因此,如果您只想让您的代码可以访问此功能,而不是在 Excel 表格中,您可以添加私有:

Private Function Coverts(ByVal inputString As String) As String
   'Coverts code here
End Function

【讨论】:

  • 如果我这样做,那么我将无法在另一个模块中访问此功能。对吗?
  • 正确。检查您的问题下的评论。
  • 虽然这确实将范围限制为Private 我确实有一种感觉,OP 的目的是在他的其他函数中访问函数的范围,而不是在模块之外。但是好吧,由于没有指定,这在技术上是一个正确的答案
【解决方案3】:

如果从工作表调用,您可以通过识别Application.Caller 使该函数无法运行。如果从 XL UI 作为函数调用,这将是 Range(即函数所在的单元格)。

Function Coverts(ByVal inputString As String) As String

   If TypeName(Application.Caller) = "Range" then
      Coverts = cverr(xlerrna)
      exit function
   end if

   'Coverts code here

End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2022-08-10
    • 2017-08-31
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多