2016-07-12 12 views
1

Ich habe an diesem Thema für meine Arbeit gearbeitet. Ich versuche, eine ähnliche Funktion zu NetworkDays in Excel zu erstellen. Dadurch werden die Geschäftstage zwischen zwei Daten ohne Feiertage zurückgegeben. Dies ist ein Codebeispiel, das ich erneut eingegeben habe und versucht habe, es zu optimieren, damit es funktioniert. Die Variable dateInc ist eine inkrementierende Variable. Das scheint zu überlaufen, wenn ich versuche, den Wert gleich der startDate-Nummer festzulegen. Dieses Startdatum würde wiederum dazu führen, dass dateInc vom Startdatum bis zum Enddatum zählt. Ich bin mir nur nicht sicher, ob das ein Amateurfehler oder ein echtes Problem ist, über das ich etwas lernen muss. Ich habe versucht, Fehlerbehandlung hinzuzufügen, um den Fehler zu überspringen und fortzusetzen, aber es sind nur alle. Ich bin offen für jede konstruktive Kritik und jeder Rat in der Programmierpraxis und Lösungen sind willkommen.MS Access Variablendeklaration/Überlauf Problem

Hinweis: Ich habe versucht, mögliche ungleichmäßige Datumswerte mit Zeiten unterzubringen. Das änderte nichts und meine Daten haben keine Zeit in den Datumswerten.

Function Workdays(ByRef startDate As Date, ByRef endDate As Date) As Integer 
    Dim countDays&, dateInc#, startLong#, endLong#, strSQL$ 
    Dim rs As Recordset 
    Dim db As Database 
    'intialize variables to avoid overflow|Note dates are converted to a double 
    countDays = 0 
    dateInc = 0 
    startLong = CDbl(startDate) 
    endLong = CDbl(endDate) 
    'SQL select statement 
    strSQL = "Select holDate from Holidays" 
    'Open database using SQL 
    Set db = CurrentDb 
    Set rs = db.OpenRecordset(strSQL) 

    'set the date comparison to the start date's number format 
    dateInc = startLong 
    Do Until dateInc = endLong 

     Select Case Weekday(CDate(dateInc)) 
      Case vbSaturday 
      'Nothing happens 
      Case vbSunday 
      'Nothing happens 

      Case Else 
       rs.FindFirst ("holDate = # " & Format(CDate(dateInc), "mm/dd/yyyy") & "#") 
       If rs.NoMatch = True Then 
        countDays = countDays + 1 
        End If 
     End Select 
     dateInc = dateInc + 1 
    Loop 
    Set rs = Nothing 
    Set db = Nothing 
    dateInc = 0 
    Workdays = countDays 
    End Function 
+0

Haben Sie versucht, Ihre Variablen am Anfang als Double zu deklarieren? –

+0

@Benno Grimm Ja ich habe es lange und doppelt versucht. und es hat keinen Unterschied gemacht. Die dateInc-Nummer scheint immer inkrementiert zu werden oder irgendwie auf den maximalen Wert gesetzt zu sein. – Stephen09

+0

Ich bin wirklich nicht sicher, warum das passiert, aber wenn Sie die Zeile kennen, in der der Überlauf auftritt, Benutzer MsgBoxes, um den Wert der Variablen (alle von ihnen) und dort den aktuellen Datentyp (https://msdn.microsoft.com/) en-gb/library/s4zz68xc.aspx) .. Vielleicht hilft Ihnen die Fehlersuche hier –

Antwort

0

Es funktioniert! Ich habe das zu Hause ausprobiert und es hat perfekt geklappt ....... was ich falsch gemacht habe.