我想學習一點VB,並有一個練習來改變一個值,並檢查以前的值,如果它是不同的做一些事情。我終於找到了一個解決方案,我能理解,並獲得來自工作:How do I get the old value of a changed cell in Excel VBA? - 液4. 我的代碼是:VB - Excel檢查以前的值給出了一個錯誤
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,但隨後在對Worksheet_Change
子的If previousRange.Exists(cell.Address)
聲明翻倒。 所有代碼都是在Sheet1上定義的,但我似乎沒有爲我的按鈕值(C3)生成以前的值。我如何生成以前的值,或者我錯過了什麼?
問候 Ĵ
正如我似乎已經把事情弄得更糟我創建了一個新的電子表格,只需改變事件的代碼並沒有別的嘗試簡化問題。因此,完整的代碼我現在是:
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.
亞倫,我想我已經倒退了。我試着添加你的代碼,但我仍然有錯誤。只要incase我錯了我刪除了我添加了(這是不承認和包括一個評論),並再次嘗試。我現在正在'未定義用戶定義類型'。我擔心我刪除了通用目錄類,我不知道如何將其添加回來? J – user2750980
嗯,不知道發生了什麼事。也許你可以添加你現有的東西,到你最初的問題的結尾?你可以通過編輯你的問題來做到這一點。 –
亞倫,我編輯了我的問題。在此先感謝J. – user2750980