2016-11-24 20 views
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 

答えて

1
Dim oldValue as Variant 

.... 

' oldValue is a 2D array 
' and there is a shift between c.Row and the index of oldValue 
If oldValue(c.Row - 3, 1) <> c.Value Then ... 
+0

それはまだ私にエラーを与えています。 – juiceb0xk

+0

@ juiceb0xk私は、インデックスのシフトのためにまだエラーがあることがわかります。 oldValueは1から18に、c.Rowは4から21に変わります。私はこの訂正を答えに加えます。 –

+0

ああ、今私の問題を見る!私は自分のコードを修正しました。ご協力いただきありがとうございます。 – juiceb0xk

関連する問題