VBA条件格式的原理
利用VBA实现条件格式设置的过程并不像在Excel工作表中设置单元格条件格式那样方便。在VBA中,对于批量操作,通常需要用循环结构逐个进行。
此处,初学者一般能够掌握为满足条件的数据设置颜色的语句,但是比较容易忽略未满足条件时的设置语句。在设置条件格式时,实质上包含了两个不同的操作步骤,满足条件设置一种格式,而不满足条件则设置另一种格式,两者缺一不可,反之会造成运行结果的不正确。
表示整行数据的方法
本例中,需要为整行数据设置单元格格式。通常,可以有几种方法表示某个区域,比较容易想到的是以下形式:
Range("A5:C5")
行号RowN需要用变量表示,则为
Range("A" & RowN & ":C" & RowN)
该表示方法是可行的,但是在众多的文本连接的过程中比较容易出错,而且代码阅读也会造成一些困扰。可以采用Columns结合Rows的方法进行表示,首先用Columns("A:C”)表示A:C列,然后用Rows (RowN)表示该区域的第RowN行。也可以用以下方式表示:
Rows(RowN).Columns(¨A:C")
日期函数DateSerial
要以变量表示日期201 3年5月1日,可以采用日期数据的标准写法:
#2013-5-1#
当使用者的系统设置与开发者的系统设置一致时,该方法是正确的。然而,每个人的系统设置不尽相同。在开发者的系统中表示日期“年月日”的格式,可能在使用者的系统中变成了“年日月”,即5月1日可能就成了1月5日,从而造成程序运行的错误。对于比较通用的程序,处理日期就要格外谨慎。因而本例中以函数DateSerial来生成日期表达式,其语法为
DateSerial(year,month,day)
其中,year、month和day为整数,分别表示年、月、日。利用该函数不会产生由于系统设置的不同而造成日期的歧义。
利用工作表事件实时设置格式
一般地,条件格式的设置程序是需要手动触发的。在日常工作中,条件格式需要根据数据的变化实时计算。开发者通常可以通过工作表的Change事件来实时触发格式设置程序的运行。
示例:
条件格式是Excel中常用的用于提醒或突出某组数据的重要手段。如图所示,该表为某公司客户付款状况,现需要快速标识超过期限未付款的客户(当前日期为2013年5月1日),该如何用VBA实现?
姓名 | 账款到期日 | 付款状况 |
客户1 | 41634 | 未付款 |