我已经使用了微软网页上的代码,这样每当我的范围内的一个单元格发生变化时,一个消息框会自动告诉我这已经发生了。该页面是: https://support.microsoft.com/en-us/kb/213612
我复制并粘贴的代码是(我对它进行了非常轻微的编辑 - 编辑内容在下面的代码中):
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("B1:B10")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
' Display a message when one of the designated cells has been
' changed.
' Place your code here.
MsgBox "Cell " & Target.Address & " has changed."
End If
End Sub
然而,这段代码并没有完全符合我的要求。在B10里面我有公式:
=IF(D10="709A", IF(AND(D10="709A"), "Yes", "No"), "")
公式本身并不重要,它是公式的作用。公式输出"是"在B10中,如果D10输入" 709A"。因此,根据我的知识,如果我输入" 709A"我将自动从我的宏中获取一个消息框。进入D10,因为它改变了B10的值。但我不是。如果公式本身发生变化,我只会得到一个消息框,即使输出(值/单元格中可见的内容 - 是否有技术标签?)也不会改变。如何创建一个自动告诉我单元格输出何时发生变化的宏?即:这告诉我输出已从""到"是"当D10输入" 709A"?
时答案 0 :(得分:2)
我能想到的一种解决方法是在Worksheet_Change事件中有一个变量数组,用于存储每个键单元格的.value或.value2属性,并将其与更改的单元格进行比较,然后触发您的消息盒那样。问题是代码非常笨拙,而且你开始观看的关键单元越多,就越笨重。
答案 1 :(得分:2)
与Roman B的建议类似的解决方法,但使用全局数组。激活工作表时,这会将值存储在B1:B10中,然后每次在工作表中进行更改时检查并更新。这可能不是一个理想的解决方案,但似乎只需要检查10个单元格即可。
somepatches = [patch for k,patch in enumerate(patches) if k in indice]
collection = PatchCollection(somepatches, facecolor='none',
edgecolor='grey', linewidths=1.5, zorder=2, alpha=0.8)
ax.add_collection(collection)
答案 2 :(得分:1)