单元格格式更改时触发的事件

时间:2017-04-20 14:33:25

标签: excel vba excel-vba

我有一个宏突出显示包含基于Target事件的Worksheet_SelectionChange单元格的表格的行。 我的宏更改.Pattern的{​​{1}},.TintAndShade.Color属性,有效地用颜色填充它们,但只是暂时:当一个单元格如果选择了不同的表行,则宏会突出显示该行并将第一行恢复为其原始格式。我声明了一个tableRow.Interior数组,我在格式化填充之前保存了格式,并在重新填充填充时读回了。

我希望在更改所选范围的格式(特别是列出的Public formatLog()值中的任何一个)时触发另一部分代码,但只能手动执行。因此,当我的宏格式化时,我可以使用.Interior.[...]来关闭,但是由用户执行相同操作时触发。即一个Application.EnabledEvents = False事件,用于监控工作表中的任何格式更改。

为什么这种做法?

最简单的方法是使用Worksheet_FormatChange(ByVal Target As Range)触发器记录当前的单元格格式,将其与之前的格式进行比较,然后如果它已更改,我只需将新值放入my { {1}}这样,当我点击离开远程处理代码时,会将单元格重置为保存在日志中的新格式。

即。考虑4个案例

案例A,没有记录格式更改的事件

Worksheet_SelectionChange最初填充为绿色。当我选择formatLog()时,保存A1:D1的颜色,然后我的宏将所有桶填充为黄色。我将A1更改为红色填充,然后点击新行A1:D1。现在宏观察A1点中保存的值,它们全部为绿色,并用绿色填充A2

结果:A1:D1红色填充未保存

案例B,将登录与A1:D1结合使用以记录颜色变化

A1如上所述为绿色。选中Worksheet_SelectionChange并注明其位置A1:D1。情况和以前一样; 保存A1的颜色,然后我的宏将所有桶装满黄色。我将t更改为红色填充,然后单击。这一次A1:D1触发,指向最后一个已知的目标位置A1 SelectionChange;代码见" t"并更新A1以反映这一点。最后,当我点击第1行并进入A1 was Green, now it's Red时,宏会使用formatLog()

的新格式恢复A2

结果:保存红色格式(有时)

案例C,忽略黄色填充

案例B工作正常,除非不是填写A1:D1红色,我只需点击即可。然后我的A1被触发,查看最后一个目标A1(A1),说SelectionChange t 并将其保存到日志中。但黄色填充是由宏完成的,而不是用户完成的。这显然不正确。

相反,我可以告诉选择更改只更新日志,如果格式不是黄色 - 这导致案例4 ,如果我手动用与宏相同的颜色填充单元格怎么办? 。如何判断填充是人还是计算机?这是我想使用Oh look, A1 was Green, now it's的地方,但不能!

一种方法是使用不同的yellow事件,该事件在宏运行时被禁用,但由用户格式化触发。如果您已经完成了所有这些,那就是我要求举办新活动的原因。我知道有类似的问题被问到:here's one但我对VBA来说相对较新,并且不能理解为我的问题应用答案。

0 个答案:

没有答案