2016-08-05 80 views
0

Ich erhalte immer einen 'Laufzeitfehler' 13 ': Typ Mismatch "Fehler beim Vergleich von 2 Daten. Der Code greift ein Datum aus einer zweiten Arbeitsmappe, in diesem Fall habe ich versucht, es in eine Zelle einzufügen, um sicherzustellen, dass es ein Datum ist ... Was es ist. Dann versucht es, es mit einem Datum zu vergleichen, das bereits auf dem aktuellen Arbeitsbuch steht. Das eingefügte Datum und die anderen Daten sind identische Formate. Ich habe keine Ahnung, warum es die 2 Daten nicht vergleichen kann! Ich habe auch versucht, CDate() um jede der Komponenten ohne Erfolg zu setzen. Bitte helfen Sie.Laufzeitfehler '13: Typenkonflikt beim Vergleich der Daten - EXCEL VBA

Sub NewMacro() 
Dim CurrentWB As Workbook 
Dim ForecastWB As Workbook 
Dim strDate As Date 

Set CurrentWB = ActiveWorkbook 

Application.DisplayAlerts = False 
Set ForecastWB = Workbooks.Open("My Other Workbook File Name") 
Application.DisplayAlerts = True 
strDate = ActiveWorkbook.Worksheets("My Sheet Name").Cells(20, "N").Value 

ThisWorkbook.Activate 

If Cells(5, 5) = Range("A:A") Then 'TYPE MISMATCH HERE 
    Set x = Range("A:A").Find(what:=Cells(5, 5), lookat:=xlWhole) 
    Cells(x, 5) = strDate 
End If 

End Sub 
+1

bitte für beide Tage, überprüfen Sie, dass 'IsDate()' wahr ist ... kann es die Chance, dass zumindest ein Datum wie ein String behandelt wird ... siehe [DIESE] (http://stackoverflow.com/questions/10502802/cdate-type-mismatch-error) –

+2

Wäre nicht 'Cells (5, 5) = Range (" A: A ")' vergleichen Sie eine einzelne Zelle mit einem Ganzen Säule? 'Zellen (5, 5) = Bereich (" A1 ")' funktioniert. –

+0

@ DarrenBartrup-Cook das ist die eine :) schreibe es –

Antwort

3

Von dem, was ich in Ihrem Code lesen kann: Cells(5, 5) = Range("A:A") - Sie einen einzelnen Wert auf eine ganze Spalte von Werten nicht vergleichen.

Cells(x, 5) = strDate - x ist ein Bereichsobjekt, keine Zeilennummer. Verwenden Sie stattdessen x.Row.

Wenn der Wert in Cells(5,5) nicht dann gefunden x wird nothing gleich einen Fehler auf dieser Linie verursacht: Cells(x, 5) = strDate

Versuchen Sie diesen Code anzupassen:

Sub Test() 

    Dim x As Range 

    With ThisWorkbook.Worksheets("Sheet1") 
     Set x = .Range("A:A").Find(What:=.Cells(5, 5), LookIn:=xlValues, LookAt:=xlWhole) 
     If Not x Is Nothing Then 
      .Cells(x.Row, 5) = CDate("5 Aug 2016") 
     End If 
    End With 

End Sub 

Es Spalte A in Sheet1 suchen für der Wert in der Zelle Sheet1!E5. Es wird dann 05/08/2016 in Spalte fünf der gefundenen Zeile setzen.

With...End With: https://msdn.microsoft.com/en-us/library/wc500chb.aspx

+0

Vielen Dank Darren! Das funktioniert perfekt. Ich schätze es sehr! – dReDone