在Excel VBA中使用类模块存储和比较数组发生更改时的值
我偶然回答了上一个关于上述主题的post。 我已经尝试了Radek推荐的代码(按照下面提供的链接),它的工作原理。
我想知道如果有人可以向我解释如何编码的作品,即如何MyIniVal和MyRange不具有相同的值,因为Initialize_MySheet程序设置它们的值是相同的?
非常感谢提前!
https://stackoverflow.com/a/26738652/4814794
代码是:
称为“Class1”的类模块:
Public WithEvents MySheet As Worksheet Public MyRange As Range Public MyIniVal As Variant Public Sub Initialize_MySheet(Sh As Worksheet, Ran As Range) Set MySheet = Sh Set MyRange = Ran MyIniVal = Ran.Value End Sub Private Sub MySheet_Calculate() If MyRange.Value <> MyIniVal Then Debug.Print MyRange.Address & " was changed from " & MyIniVal & " to " & MyRange.Value StartClass End If End Sub
并在一个正常的模块:
Dim MyClass As Class1 Sub StartClass() Set MyClass = Nothing Set MyClass = New Class1 MyClass.Initialize_MySheet ActiveSheet, Range("A2") End Sub
在传递给Initialize_MySheet过程时,MyIniVal存储单元格的值 。 MyRange存储对工作表单元格的引用 ,并将随着单元格值的更改而更新。
编辑 – 可以想象,Ran可以持有对多个单元格的引用,在这种情况下代码将失败。