types不匹配错误超越VBA

我的代码的目标是获取一个单元格的旧值,并检查它是否与一个新的值,如果它进入。 如果旧值更改为新值,则更新指定单元格中的date。

我的代码的问题是,我似乎无法find一种方法来解决这个错误,而不是我的代码中断,因此我无法修复这一行代码。 我有两个工作表中的代码,这两个工作表的值都是针对不同的单元格而改变的。 问题是,这个代码只适用于一个工作表,但是当我使用两个相同的代码时,它会抛出一个types不匹配的错误。

这是我的代码:

Dim oldValue As Variant Public Sub Worksheet_SelectionChange(ByVal Target As Range) 'My other worksheet is referencing cells E2:E100 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")) 'Check value against what is stored in "oldValue" 'Type mismatch is on this line here 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 End If End Sub 

我不知道什么types的不匹配错误的意思,所以我无法自己解决这个问题。 我的问题是,如何正确地更新我的单元格,而不会导致这种不匹配的错误?

编辑:请记住,一个工作表正在寻找数字数据的变化,另一个工作表正在寻找string值的变化,我不知道这是否重要。 如果我拿出一个工作表的所有代码,那么这个代码就会为另一个工作,但是当我把它放回去的时候,它们都停止工作了。

谢谢。

你可以尝试下面的代码:(把它放在ThisWorkbook的代码中)

 Private Sub Workbook_Open() Application.ScreenUpdating = False Dim ws As Worksheet Dim ws1 As Worksheet Set ws1 = ActiveSheet For Each ws In Worksheets ws.Activate ws.Range("A1").Select Next ws1.Activate Application.ScreenUpdating = True End Sub 

一个警告 – Workbook_Open事件有时是“有问题的”,因为它有时会在所有Worksheets完全加载之前触发。