2016-11-28 7 views
1

Das Ziel meines Codes ist es, den alten Wert einer Zelle zu nehmen, und überprüfen Sie es mit einem neuen Wert, wenn es eingegeben wird. Wenn sich der alte Wert in einen neuen Wert ändert, aktualisieren Sie das Datum in einer angegebenen Zelle.Typ Mismatch Fehler Excel VBA

Das Problem mit meinem Code ist, dass ich keinen Weg finden kann, um diesen Fehler zu umgehen, ohne dass mein Code bricht, also habe ich Probleme, diese eine Codezeile zu beheben. Ich habe diesen Code in zwei Arbeitsblättern, beide mit ihren für verschiedene Zellen geänderten Werten. Das Problem ist, dieser Code funktioniert nur, wenn es für ein Arbeitsblatt ist, aber wenn ich zwei mit dem gleichen Code verwende, löst es einen Typenkonfliktfehler aus.

Hier ist mein Code:

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 

Ich bin nicht sicher, welche Art Mismatch Fehler bedeutet, also bin ich nicht in der Lage, dieses Problem selbst zu beheben. Meine Frage ist, wie kann ich meine Zellen richtig aktualisieren, ohne dass dieser Mismatch-Fehler auftritt?

EDIT: Denken Sie daran, ein Arbeitsblatt sucht nach numerischen Datenänderungen, und das andere Arbeitsblatt sucht nach Zeichenfolge Wertänderungen, ich bin mir nicht sicher, ob das von Bedeutung ist. Wenn ich den ganzen Code für ein Arbeitsblatt herausnehme, funktioniert der Code für den anderen, aber wenn ich ihn wieder einfüge, hören beide auf zu arbeiten.

Vielen Dank.

+0

Ich erkenne diesen Code! – YowE3K

+0

Haha, ja, ich bin wieder da: p – juiceb0xk

+0

Ich nehme an, dass das 'Change'-Ereignis ausgelöst wurde, ohne dass das' SelectionChange'-Ereignis zuvor ausgelöst wurde. Möglicherweise war die Zelle, die aktualisiert wurde, die ausgewählte Zelle, als die Arbeitsmappe geöffnet wurde? Sie müssen möglicherweise erzwingen, die 'SelectionChange' Ereignisse auszulösen, wenn die Arbeitsmappe erstmals geöffnet wird, oder sicherstellen, dass die Arbeitsmappe nicht mit der Auswahl irgendwo in D4 gespeichert wird: D21. – YowE3K

Antwort

2

könnten Sie versuchen, den folgenden Code: (Legen Sie sie in den Code für 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 

Eine Warnung - die Workbook_Open Ereignis wird manchmal als „problematisch“, wie es gelegentlich feuert, bevor alle Worksheets sind voll beladen .

+0

Es wirft immer noch den Typ Mismatch-Fehler. – juiceb0xk

+0

@ juiceb0xk - Auch nach dem Schließen der Arbeitsmappe und erneutes Öffnen? – YowE3K

+0

Ja, ich habe es mehrmals versucht, auch wenn die Auswahl anderswo gespeichert wurde als die referenzierten Zellen. – juiceb0xk