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
Haben Sie versucht, Ihre Variablen am Anfang als Double zu deklarieren? –
@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
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 –