Excel 如果单元格中的计算值基于

Excel 如果单元格中的计算值基于,excel,vba,excel-formula,Excel,Vba,Excel Formula,我在同一个电子表格中有两张工作表,第二张工作表的日期以第一张工作表为基础,有各种vlookup。现在,我已经知道如果单元格中的计算值发生变化,如何更改单元格颜色: Private子工作表\u更改(ByVal目标作为范围) Target.Interior.Color=3 端接头 当我在第二个工作表中使用此VBA并更改第一个工作表时,第二个工作表中的单元格颜色不会更改。手动更新第一个工作表时,我希望第二个工作表中具有公式的单元格更改其颜色。 可能吗?谢谢 我猜有一个解决方案:因为第二个工作表中的

我在同一个电子表格中有两张工作表,第二张工作表的日期以第一张工作表为基础,有各种
vlookup
。现在,我已经知道如果单元格中的计算值发生变化,如何更改单元格颜色:

Private子工作表\u更改(ByVal目标作为范围)
Target.Interior.Color=3
端接头
当我在第二个工作表中使用此
VBA
并更改第一个工作表时,第二个工作表中的单元格颜色不会更改。手动更新第一个工作表时,我希望第二个工作表中具有公式的单元格更改其颜色。 可能吗?谢谢


我猜有一个解决方案:因为第二个工作表中的VBA代码无效,因为我们没有用户触发。因此,在您的第一份工作表中,我们可以执行以下操作:

Private子工作表\u更改(ByVal目标作为范围)
Target.Interior.Color=RGB(255,0,0)
工作表(“第二工作表的名称”)。范围(Target.Address())。Interior.Color=_
RGB(255,0,0)
端接头
当您更改第一张工作表中的内容时,第二张工作表将更改填充颜色


第二个解决方案更复杂,但更接近您的需求。它在第二张工作表中使用VBA
工作表\u Calculate()
事件,请先从第一张工作表中删除所有VBA,如下所示:

私有函数GetActualSedRange(ByVal strVLookUp)
设置GetActualSedRange=Range(“A1”).Resize(Cells.Find(what:=strVLookUp,SearchOrder:=xlRows_
SearchDirection:=xlPrevious,LookIn:=xlFormulas)。行_
Cells.Find(what:=strVLookUp,SearchOrder:=xlByColumns_
SearchDirection:=xlPrevious,LookIn:=xlFormulas).Column)
端函数
'
'更改公式中包含某些字符串的所有单元格的颜色:
'
'strVLookUp:vlookup
'strFirstAddress:第一个单元格的地址,如$C$5
'objCell:1个单元格的范围对象
'objRange:包含公式的单元格的范围对象
'lBackColor:长为颜色索引
'
专用子工作表_Calculate()
Dim strVLookUp作为字符串,strFirstAddress作为字符串
对象为Dim objCell,对象为objRange
暗淡的背景色和长的一样
'在第二工作表的公式中搜索此字符串:
strVLookUp=“vlookup”
'根据需要更改背景颜色:
lBackColor=RGB(255、150、0)
'使用涉及“vlookup”的公式获取整个范围:
Set objRange=getActualsedRange(strVLookUp)
'如果我们找到一个范围,在其上循环:
如果不是objRange,那么什么都不是
设置objCell=objRange.Find(strVLookUp,LookIn:=xlFormulas)
如果不是objCell,那么什么都不是
strFirstAddress=objCell.Address
做
objCell.Interior.Color=lBackColor
设置objCell=objRange.FindNext(objCell)
循环而非objCell为Nothing,objCell.Address strFirstAddress
如果结束
'可用内存:
Set objCell=Nothing
Set objRange=Nothing
'
如果结束
'
端接头

这是基于以下事实:在第二张工作表中,有些单元格有如下公式:=vlookup(“MyValue”…),您引用了vlookup()函数。

能否添加一个实际示例、一些示例数据、一些屏幕截图和一些有关公式的信息(它们是否与第一张工作表上的单元格位于同一单元格中)?您可以随时回答您的问题。工作表_Change()只有在手动更改单元格时才会发生,而不是更改计算值。这听起来更像是一项工作。您好,谢谢您的回答,我已经像您发布的那样更改了VBA代码,但当我更改第一个工作表时,第二个工作表的颜色仍然没有更改…即使我更改了第一个工作表,没有颜色变化..你好!我已经解决了第二个问题:我更改了第一张工作表,没有颜色更改。但第一个问题仍然存在。因为第二个单元格数据与第一个工作表上的单元格不在同一单元格中。。。你能告诉我该怎么做吗?你可以在第二张表中找到单元格地址,其中有行、列表达式,例如,$C$10,C列,第10行,如下所示:工作表(“第二张工作表的名称”).Range($C$10”).Interior.Color=RGB(255,0,0),但另一个问题是每个工作表中有数千个数据。我不能逐个检查每个单元格的数据。。。在这段时间里,我学习了计算,可以读取公式的结果,我们可以遵循这个想法吗。。。?无论如何,谢谢你的帮助和回答!对不起,您的意思是我需要将所有“strWorksheetName1”更改为我的工作表名称,例如“Sheet 1”吗?如果情况与我重新编辑问题中的图片类似,我是否应该将代码更改为:Dim Sheet1作为字符串,$1作为字符串Dim A1作为范围,A1:B24作为对象我很抱歉我的无知,非常感谢您的帮助。