Excel公式逆天了--使用公式修改其他单元格格式

2023-12-15 09:35:45

想必连VBA小白都知道,VBA编程中有两种过程:SubFunction(有时称为UDF,User Defined Function),二者最明显的区别在于Function可以提供返回值,并且在Excel公式可以调用Function

多数VBA图书都会以不同形式包含如下内容。


本段落引自微软文档,官方文档未提供中文版本,本人进行了翻译,以便于大家理解

在工作表单元格公式中调用自定义函数(UDF)无法更改Excel的运行环境。这意味着无法使用公式执行以下任何操作:

  • 在工作表中插入、删除或格式化单元格
  • 更改其他单元格的值
  • 移动、重命名、删除或添加工作簿的工作表
  • 更改任何环境选项,如计算模式或屏幕视图
  • 向工作簿添加名称
  • 设置属性或执行大多数方法(对象的Method)

出自: Description of limitations of custom functions in Excel


简单概述就是上述内容,就是:不要非法使用UDF,此时UDF只能委屈的说…

备注:插图来自互联网,版权归原作者所有


有些好奇的小朋友仍然在不停的问,这些江湖传闻都是真的吗?是否存在武林秘籍突破这些限制?答案是:确实存在武林秘籍。

首先说明一下,纵然UDF可以突破上述限制,但是术业有专攻,大家应该尽可能规范地使用SubFunction.

示例代码如下。

Function SetColor(rCell As Range, r As Integer, g As Integer, b As Integer)
    Application.Volatile
    Application.Evaluate "SetCellColor(" & _
            rCell.Address & "," & r & "," & g & "," & b & ")"
    SetColor = rCell.Address & " RGB " & r & "," & g & "," & b
End Function
Private Sub SetCellColor(rCell As Range, r As Integer, g As Integer, b As Integer)
    rCell.Interior.Color = RGB(r, g, b)
End Sub

【代码解析】
第1~6行代码为UDF过程,可以在单元格公式调用此过程。
第2行代码设置UDF为易失函数,任何单元格发生变化时,将重算此函数,注意如果大量单元格使用易失函数,可能会引起Excel卡顿。
第3~4行代码使用Evaluate函数调用Sub SetCellColor(),此句是整个解决方案的核心,替换为Call则无法实现同样的效果。
第5行代码设置UDF返回值,如果设置返回值为空,则设置了公式的单元格中为空白,相当于被隐藏了。
第7~9行代码根据参数设置制定单元格的填充色。


在A1单元格中输入公式=SetColor(C1,255,0,0),并按回车完成输入,将单元格C1填充色设置为红色。同理,可以使用公式设置多个单元格的填充色,如A3单元格所示。为了便于大家理解,在B列中显示A列单元格的公式,如下图所示。

在这里插入图片描述

如果用户修改单元格填充色,例如选中C列和D列清除填充色,那么当工作表中任意单元格发生变化时,公式将重新计算,C列和D列的填充色将被恢复,相当于实现了挥之不去的单元格格式,效果如下图所示。使用工作表的事件代码也可以实现相同效果。

请添加图片描述
如果希望实现公式调用UDF突破其他限制(例如修改其他单元格的内容),稍加修改示例代码就可以实现。


如果各位同学发现此方案有哪些独特的应用场景,也欢迎大家留言分享。

文章来源:https://blog.csdn.net/taller_2000/article/details/135007901
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。