2017-03-19 7 views
0

Ich habe eine For-Schleife, die ausgeführt wird, bis eine leere Zelle ist. Spalte A sind die Daten, die ein benutzerdefiniertes Format sind. Ich versuche, einen wöchentlichen (Mon - Fri) Bericht zu führen.Overflow und Mismatch Fehler

42738 kehrt 2017.01.03

42739 kehrt 2017.01.04

42740 kehrt 1/5/2017

und so weiter

Ich versuche, herauszufinden, wie Sie einen Bereichswert festlegen, um diesen wöchentlichen Bericht zu erstellen.

Die Theorie I testen war A3 - A2 = 1, die zu tues usw. mon ist,

wenn A3 - A2 = 2 dann das zeigt ein Wochenende.

dies ist der Code, den ich bisher

Dim wks As Worksheet 
Dim LastDate As Long 
Dim myDate As Integer 

Set wks = Worksheets("Labor") 
LastDate = wks.Cells(wks.Rows.Count, "A").End(xlUp).Row 

For dRow = 2 To LastDate 

    xDate = CInt(Cells(dRow, "A").Value) 
    yDate = CInt(Cells(dRow - 1, "A").Value) 

    If xDate - yDate = 2 Then 
     'weekend 
     MsgBox ("Weekend!") 

    ElseIf xDate - yDate = 1 Then 
     'next day   
    ElseIf xDate - yDate = 0 Then 
     'same day  
    Else 
     MsgBox (xDate - yDate) 

    End If 


    myDate = 1 

Next dRow 

Meine Fragen sind:

Wie behebe ich den Überlauffehler für xDate =?

Warum ist yDate = ein Mismatch-Fehler?

Gibt es eine sauberere Möglichkeit, dies zu schreiben?

Vielen Dank im Voraus!

+0

Dim myDate Solange – 0m3r

Antwort

0

Angenommen, die Datumswerte in Ihrer Spalte A sind in ihrem numerischen Format (wie Sie in Ihrem Beitrag erwähnt, 42738, 42739, etc.), dann wird der Code unten erhalten, was Sie wollen.

Sie müssen die Datumswerte nicht in den Zellen in Variablen speichern. Sie können den Unterschied zwischen zwei Zellen mithilfe der Funktion DateDiff direkt berechnen. Um mehr über die DateDiff zu lesen, lesen Sie HERE

Anschließend können Sie Select Case für jede Art von Szenario verwenden, die Sie überprüfen möchten.

-Code

Option Explicit 

Sub NumofWeekdays() 

Dim wks    As Worksheet 
Dim LastDate  As Long 
Dim NumofDays  As Long 
Dim dRow   As Long 

Set wks = Worksheets("Labor")  
With wks 
    LastDate = .Cells(.Rows.Count, "A").End(xlUp).Row 

    For dRow = 2 To LastDate 
     NumofDays = DateDiff("d", .Range("A" & dRow - 1).Value, .Range("A" & dRow).Value)       
     Select Case NumofDays 
      Case Is >= 2 
       'weekend 
       MsgBox "Weekend!" 

      Case 1 
       'next day 
       MsgBox "Next Day" 

      Case 0 
       'same day 
       MsgBox "Same Day" 

      Case Else 
       MsgBox NumofDays 

     End Select 
    Next dRow 
End With 

End Sub 
+0

konnte ich die DateDiff Funktion nutzen zu können! es half drastisch danke! –