我正在尝试创建一个表格,该表格显示用户定义的RAL的颜色。我有2张纸:“数据”和“ Sheet1”。数据表包含RAL颜色表(+一些其他源数据,也与此问题无关)-该表名为“颜色”,如下所示:
在Sheet1中,我有一个单元格(B10),该单元格仅包含表“ Color [RAL]”中的数据(使用数据验证功能)。
我有以下代码:
Private Sub Worksheet_Calculation()
Range("F10").Interior.Color = RGB( _
Application.VLookup(Range("B10"), Worksheets("data").Range("F1:J214"), 3), _
Application.VLookup(Range("B10"), Worksheets("data").Range("F1:J214"), 4), _
Application.VLookup(Range("B10"), Worksheets("data").Range("F1:J214"), 5) _
)
End sub
我本来想使用这样的东西:
Private Sub Worksheet_Calculation()
Range("F10").Interior.Color = RGB( _
Application.VLookup(Range("B10"), color[RAL], 3), _
Application.VLookup(Range("B10"), color[RAL], 4), _
Application.VLookup(Range("B10"), color[RAL], 5) _
)
End sub
但是不会编译。因此,我决定对范围进行硬编码,因为它不会经常更改,并且在代码中更改范围也没有问题。
无论如何,当我应用相同的代码(上面的第一个)时,虽然VLookup的参数在同一张工作表中(数据表+“检查单元格”),但所有操作均符合预期-我更改了单元格中的值(也使用数据验证功能),所需的单元格将更改其颜色。
当我将表格移动到其他工作表时,它不会自动刷新-我需要手动运行Sub来更改颜色。手动重新计算工作表(或工作簿)时,它甚至都没有改变。
有什么想法为什么会发生这种现象以及如何解决?
奖金问题:)-有没有一种方法可以在VLookup中实际引用表Color的RAL列,而不是对Range进行硬编码?
答案 0 :(得分:0)
问题是Worksheet_Calculation()
不是事件,因此不会自动运行。因此,您必须使用Worksheet_Calculate
事件。这是在特定的工作表中。因此,如果将表格移动到另一个工作表上,则还需要将Worksheet_Calculation()
事件移动到该工作表上,否则该代码仍将应用于旧工作表。
为避免移动代码,您可以在Workbook_SheetCalculate
中使用ThisWorkbook
事件,该事件在重新计算所有工作表的任何时运行。
对于您的奖金问题,请查看The VBA Guide To ListObject Excel Tables或使用Range("Color[RAL]")
访问表RAL
的列Color
中的数据范围。