我正在尝试学习一些 VB,并且有一个练习可以更改一个值并检查以前的值,如果它不同,请执行一些操作。我最终找到了一个我可以理解并开始工作的解决方案:如何在 Excel VBA 中获取已更改单元格的旧值? - 解决方案4。我的代码是:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Variant
For Each cell In Target
If previousRange.Exists(cell.Address) Then
If Not Application.Intersect(Target, Me.Range("B12:B12")) Is Nothing Then
If previousRange.Item(cell.Address) <> cell.FormulaR1C1 Then
cell.Interior.ColorIndex = 36
End If
End If
End If
Next
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cell As Variant
Set previousRange = Nothing 'not really needed but I like to kill off old references
Set previousRange = CreateObject("Scripting.Dictionary")
For Each cell In Target.Cells
previousRange.Add cell.Address, cell.FormulaR1C1
Next
End Sub
下一个练习是添加一个按钮并根据用户的响应执行操作。所以我补充说:
Private Sub CommandButton2_Click()
Dim currentValue, message As Integer
currentValue = Range("C3").Value
message = MsgBox("Click OK to add 1, cancel to leave", vbOKCancel, "Addition")
If message = 1 Then
Range("C3").Value = currentValue + 1
End If
End Sub
我遇到的问题是该按钮向 C3 添加了一个,但随后在子上的If previousRange.Exists(cell.Address)
语句处掉了Worksheet_Change
下来。所有代码都在 Sheet1 上定义,但我似乎没有为我的按钮值(C3)生成以前的值。如何生成以前的值,或者我缺少什么?
问候 J
由于我似乎让事情变得更糟,我创建了一个新的电子表格,其中只包含更改事件代码,没有其他任何东西可以尝试简化问题。所以我现在拥有的完整代码是:
Option Explicit
Dim previousRange As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Variant
For Each cell In Target
If previousRange.Exists(cell.Address) Then
If Not Application.Intersect(Target, Me.Range("B12:B12")) Is Nothing Then
If previousRange.Item(cell.Address) <> cell.FormulaR1C1 Then
cell.Interior.ColorIndex = 36
End If
End If
End If
Next
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cell As Variant
Set previousRange = Nothing 'not really needed but I like to kill off old references
Set previousRange = CreateObject("Scripting.Dictionary")
For Each cell In Target.Cells
previousRange.Add cell.Address, cell.FormulaR1C1
Next
End Sub
现在,如果我更改 B12 单元格,previousRange As New Dictionary
代码将突出显示,并显示一条消息“编译错误:未定义用户定义类型”。在我引入消息框并进行后续更改之前,此代码曾经有效。一定是用户错误。你能帮我吗?
问候J。