2016-11-28 15 views
1

Цель моего кода - взять старое значение ячейки и проверить его на новое значение, если оно введено. И если старое значение изменится на новое значение, обновите дату в указанной ячейке.Тип ошибки несоответствия excel VBA

Проблема с моим кодом заключается в том, что я не могу найти способ обойти эту ошибку без нарушения кода, поэтому у меня возникли проблемы с попыткой исправить эту строку кода. У меня этот код в двух листах, причем оба значения изменяются для разных ячеек. Проблема в том, что этот код работает только в том случае, если он предназначен для одного рабочего листа, но когда я использую два с тем же кодом, он выдает ошибку несоответствия типа.

Вот мой код:

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 

Я не уверен, какой тип означает ошибка несоответствия, так что я не в состоянии решить эту проблему самостоятельно. Мой вопрос в том, как я могу правильно обновлять свои ячейки без этой ошибки с ошибкой несоответствия?

EDIT: Имейте в виду, что один рабочий лист ищет числовые изменения данных, а другой рабочий лист ищет изменения строковых значений, я не уверен, если это имеет значение. Если я вытащу весь код для одного листа, код будет работать для другого, но когда я верну его обратно, они оба перестанут работать.

спасибо.

+0

Я узнаю этот код! – YowE3K

+0

Ха-ха, да, я снова вернулся: p – juiceb0xk

+0

Я предполагаю, что событие «Change» было запущено без события «SelectionChange», которое было запущено перед ним. Возможно, обновленная ячейка была выбрана ячейкой при открытии книги? Возможно, вам придется заставить его запускать события «SelectionChange» при первом открытии книги или гарантировать, что рабочая книга не будет сохранена с выбором в любом месте D4: D21. – YowE3K

ответ

2

Вы можете попробовать следующий код: (Поместите его в коде 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 полностью загружены ,

+0

Он все еще бросает ошибку несоответствия типа. – juiceb0xk

+0

@ juiceb0xk - Даже после закрытия книги и повторного открытия? – YowE3K

+0

Да, я пробовал несколько раз, даже если выбор сохранен в другом месте, кроме упомянутых ячеек. – juiceb0xk