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 模块中。你的公式应该返回TrueFalse 【参考方案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 - 条件格式中的用户定义函数的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA 条件格式与函数

excel中怎样用vba使单元格在特定条件下才可以编辑?

EXCEL 的自定义 VBA 函数中的用户定义警告

VBA Excel中的用户定义函数不可访问?

用户定义的函数,它接受 Excel VBA 中的连续和不连续范围

Excel VBA中的ThisCell属性如何使用?