Excel VBA - 条件格式中的用户定义函数
Posted
技术标签:
【中文标题】Excel VBA - 条件格式中的用户定义函数【英文标题】:Excel VBA - User Defined Function in Condictional Formatting 【发布时间】: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 模块中。你的公式应该返回True
或False
【参考方案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)等?以上是关于Excel VBA - 条件格式中的用户定义函数的主要内容,如果未能解决你的问题,请参考以下文章