【问题标题】:Excel VBA - User Defined Function in Condictional FormattingExcel VBA - 条件格式中的用户定义函数
【发布时间】:2018-05-17 21:13:08
【问题描述】:

我使用 VBA 代码构建了一个用户定义的函数,如果我在公式中使用它来填充单元格值,它在 Excel 中可以正常工作。但是,我不能在条件格式中使用此功能。我收到消息“这种类型的引用不能在条件格式公式中使用”。

我很好奇是否可以在条件格式中使用任何 UDF?或者根本不允许UDF?谢谢!

UDF 代码如下:

Function isValidMAC(mac As String) As Boolean

Dim regex As New RegExp
Dim strPattern As String

' Exact 12 characters.  Valid characters are a-f or A-F or 0-9
strPattern = "^[a-fA-F0-9]{12}$"

With regex
    .Global = False
    .MultiLine = False
    .IgnoreCase = False
    .Pattern = strPattern
End With

isValidMAC = regex.Test(mac)

End Function

【问题讨论】:

  • 您将代码放在公共模块还是私有工作表代码表中?
  • 您指的是哪个代码?对于 UDF 代码,它在公共模块中,否则 Excel 用户根本看不到它。有趣的是 - Excel 允许在条件格式公式中使用虚假函数名(例如“=XXX($A$1)”)。然而 Excel 抱怨一个有效的 UDF。
  • 很像这个link。我的 UDF 在一个模块中。该函数被声明为公共函数。但我不知道如何将模块声明为公共(如果有诸如“公共模块”之类的东西)。 :)
  • 模块代码表默认是公开的;工作表代码表本质上是私有的。
  • UDF 只需要位于 Same 工作簿的 Regular 模块中。你的公式应该返回TrueFalse

标签: excel vba


【解决方案1】:

由于您的 UDF 不是同一个工作簿,但在您的加载项中,您会收到此消息; 作为一种解决方法:在定义的名称中使用您的 UDF 调用,并在您的条件格式公式中使用此定义的名称

【讨论】:

  • 非常感谢您提供的信息。如何在定义的名称中使用 UDF 调用?再次感谢!
  • 在 D 列中选择您的 MAC 编号,在框中插入“dnIsValidMac”作为名称,参考:=ISVALIDMAC($D2)。现在转到条件格式并输入公式:=dnIsValidMac
  • 有没有办法在 VBA 代码中做到这一点?再次感谢!
  • ThisWorkbook.Names.Add Name:="dnIsValidMac", RefersTo:="=IsValidMac($D2)"
  • 对不起,我很笨。但是无论如何我可以定义一个名称以便它可以像函数一样工作吗?即有没有办法定义一个名称“dnIsValidMac()”。然后我可以像内置函数一样使用'dnIsValidMac'并将单元格名称作为参数输入?即=dnIsValidMac(A1)、=dnIsValidMac(B2)等?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 2011-10-02
  • 2011-02-06
  • 2018-06-06
  • 2016-10-02
  • 1970-01-01
相关资源
最近更新 更多