繁体   English   中英

从另一个工作表中获取数据时,子“worksheet_calculate()”不会自动更新

[英]Sub “worksheet_calculate()” not updating automatically when taking data from another worksheet

我正在尝试创建一个工作表,它显示用户定义的RAL的颜色。 我有2张:“数据”和“Sheet1”。 数据表包含RAL颜色表(+一些其他源数据,也与此问题无关) - 该表名为“Color”,如下所示:

表

在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中实际引用表格颜色,列RAL,而不是硬编码范围?

问题是Worksheet_Calculation()不是事件,因此不会自动运行。 因此,您必须使用Worksheet_Calculate事件。 这是在特定的表格内。 因此,如果将表移动到另一个工作表,则还需要将Worksheet_Calculation()事件移动到该Worksheet_Calculation() ,否则代码仍将应用于旧工作表。

为避免移动代码,您可以在ThisWorkbook使用Workbook_SheetCalculate事件,该事件在所有工作表中的任何工作表重新计算时运行。

有关您的红利问题,请查看VBA指南到ListObject Excel表格或使用Range("Color[RAL]")访问表格ColorRAL中的数据范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM