1
私のコードの目標は、セルの古い値を受け取り、それが新しい値と比較することです。古い値が新しい値に変わった場合は、指定したセルの日付を更新します。セルを参照するときに下付き文字が範囲外になるエラー
私のコードの問題は、コードを壊すことなくこのエラーを回避する方法が見つからないことがあるため、この1行のコードを修正しようとすると問題が発生しています。私の配列は範囲外であるか、それらの行に沿ったものであることは分かっていますが、どうやって回避するかわかりません。ここで
は私のコードです:
それは破壊だDim oldValue()
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
oldValue = Me.Range("D4", "D21").Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("D4:D21")) Is Nothing Then
Dim c As Range
For Each c In Intersect(Target, Me.Range("D4:D21"))
'Here's where my code is breaking "Subscript out of range error"
If oldValue(c.Row) <> c.Value Then
'Update value in column L (8 columns to the right of column D)
c.Offset(0, 7).Value = Date 'or possibly "= Now()" if you need the time of day that the cell was updated
End If
Next
End If
End Sub
、私は新しい値に古い値が変更された場合は、日付を更新することを定義しています。しかし、それは私に修正する方法を見つけることができないというエラーを私に与えている。
コードを範囲内で解決するにはどうすればよいですか?
編集:私は今、自分のコードを修正しました:
Dim oldValue As Variant
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
'I changed "D4", "D21" to the following:
oldValue = Me.Range("D4:D21").Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("D4:D21")) Is Nothing Then
'Application.EnableEvents = False
Dim c As Range
For Each c In Intersect(Target, Me.Range("D4:D21"))
'Check value against what is stored in "oldValue" (row 4 is in position 1, row 5 in position 2, etc)
'I also changed the array reference
If oldValue(c.Row - 3, 1) <> c.Value Then
'Update value in column L (8 columns to the right of column D)
c.Offset(0, 7).Value = Date 'or possibly "= Now()" if you need the time of day that the cell was updated
End If
Next
'Application.EnableEvents = True
End If
End Sub
それはまだ私にエラーを与えています。 – juiceb0xk
@ juiceb0xk私は、インデックスのシフトのためにまだエラーがあることがわかります。 oldValueは1から18に、c.Rowは4から21に変わります。私はこの訂正を答えに加えます。 –
ああ、今私の問題を見る!私は自分のコードを修正しました。ご協力いただきありがとうございます。 – juiceb0xk