从另一张纸上获取价值

时间:2016-03-17 10:30:42

标签: vba excel-vba excel

我在尝试使这段代码工作时遇到了一些麻烦:

Private Sub Worksheet_Change(ByVal Target As Range) 
Static ZeroFlag As Boolean 
Dim KeyCells As Range 

Set KeyCells = Range("B29") 
On Error Resume Next 
Set KeyCells = Application.Union(KeyCells, KeyCells.Precedents) 
On Error GoTo 0 

If Not Application.Intersect(Target, KeyCells) Is Nothing Then 
    If (Range("B29").Value <= 0) Xor ZeroFlag Then 
        MsgBox IIf(ZeroFlag, "Not zero", "zero") 
        ZeroFlag = Not (ZeroFlag) 
    End If 
End If 
End Sub 

问题是,警报只显示当我从工作表中更改“B29”所在的值时,但我需要在我更改其他工作表中的值时显示警报。

例如: “B29”单元位于工作表A上,是A1-A2的结果,A2从B工作单元格A1获取其值,但警报仅显示我是否从A工作表更改单元格A2而不是A1 B表。

我该怎么做才能让它发挥作用?

当我第一次开始对这段代码进行处理时,我看起来像这样,当我从diferents表中改变值时它可以工作

Private Sub Worksheet_Calculate() 
If Range("B29").Value <= "0" Then 
    MsgBox "Zero" 
Else 
    MsgBox "Not Zero" 
End If End Sub 

但是这段代码没有我需要的规则。

在单元格大于0之前,警报不会显示,当值低于0时,警报显示“零”,只要值保持低于0,它就会停止显示,此时值大于0警报显示“非零”,只要值保持在0以上就会停止显示。

我该怎么做才能让它发挥作用?

由于

2 个答案:

答案 0 :(得分:1)

您不必在Worksheet_Change中编写代码,而是必须在Workbook_SheetChange中编写代码:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    '....write your code here

End Sub

答案 1 :(得分:0)

它在工作 我已经改变了我使用过的第一个代码并包含了其他一些代码,结果就像这样

Private Sub Worksheet_Calculate()    Static ZeroFlag As Boolean 
If Range("B29").Value <= "0" Xor ZeroFlag Then 
    MsgBox IIf(ZeroFlag, "Not Zero", "Zero") 
    ZeroFlag = Not (ZeroFlag) 
End If
End Sub 

感谢大家的帮助