Excel VBA - 条件格式中的用户定义函数

4
我用VBA代码构建了一个用户定义函数,如果我在公式中使用它来填充单元格值,它在Excel中可以正常工作。但是,我无法在条件格式中使用此函数。我收到消息“无法在条件格式公式中使用此类型的引用”。 我想知道是否可以在条件格式中使用任何UDF?还是根本不允许使用UDF?谢谢!

enter image description here

enter image description here

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。 - Helloguys
非常类似于这个链接(https://dev59.com/O0jSa4cB1Zd3GeqPHaxA?rq=1)。我的UDF在一个模块中。该函数被声明为公共函数。但我不知道如何将模块声明为公共(如果有所谓的“公共模块”)。 :) - Helloguys
模块代码表默认为公共;工作表代码表则天生为私有。 - user4039065
UDF只需要在同一个工作簿的常规模块中。您的公式应该返回TrueFalse - Ron Rosenfeld
一点也不奇怪。问题在于你编写的UDF代码。 - user4039065
显示剩余6条评论
1个回答

4
由于你的UDF不在同一个工作簿中,而是在你的插件中,你将收到此消息; 解决方法:在定义名称中使用您的UDF调用,并在您的条件格式公式中使用此定义名称。

非常感谢您的信息。我如何在定义名称中使用UDF调用?再次感谢! - Helloguys
在D列中选择您的MAC号码,将“dnIsValidMac”作为名称插入,在“引用范围”框中输入:=ISVALIDMAC($D2)。现在进入条件格式并键入公式:=dnIsValidMac。 - EvR
有没有一种方法可以在VBA代码中实现这个?再次感谢! - Helloguys
ThisWorkbook.Names.Add Name:="dnIsValidMac", RefersTo:="=IsValidMac($D2)" - EvR
抱歉我可能有点儿笨,但是我能否定义一个名称,使其像函数一样工作呢?也就是说,我能否定义一个名为'dnIsValidMac()'的名称。然后我可以像使用内置函数一样使用'dnIsValidMac',并将单元格名称作为参数输入?例如:=dnIsValidMac(A1),=dnIsValidMac(B2)等。 - Helloguys
不行,因为在定义名称中 () 是不允许的。 - EvR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接