私は少し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 に 1 を追加するが、サブの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.