• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

seizoen

Status
Niet open voor verdere reacties.

Brancoli

Gebruiker
Lid geworden
27 nov 2012
Berichten
67
Voor een reserveringsprogramma wil ik, aan de hand van de aankomstdatum en de vertrekdatum, bepalen welke seizoensperiode geldt. Bijvoorbeeld periode A = aankomst en vertrek in mei, periode B = aankomst in mei, vertrek in juni etc. Ik wil dit doen met behulp van een makro. Ik heb alleen het eerste stukje gemaakt en gecontroleerd of het voor de eerste twee maanden werkt.

Ik zie klaarblijkelijk iets over het hoofd want de makro geeft geen resultaat. Is er iemand die mij uit de brand helpt?

Bij voorbaat dank,
Aad
 

Bijlagen

  • Seizoen.xlsm
    14,3 KB · Weergaven: 49
Doe eens de test met deze:

Code:
Sub seizoenBepaler()
    Dim datumA As Date, datumV As Date
    Dim seizoen As String
    
    datumA = Format(InputBox("aankomst (mm/dd/yy): "), "mm/dd/yy")
    datumV = Format(InputBox("vertrek (mm/dd/yy): "), "mm/dd/yy")
        
    MsgBox "Aankomst =" & datumA
    MsgBox "Vertrek =" & datumV
    MsgBox "Seizoen = " & DatePart("q", datumA)
End Sub
 
Dag Cobbe,

Dankjewel voor je reactie. DatePart kende ik niet maar biedt nieuwe mogelijkheden. Dank daarvoor. Maar in mijn geval moet seizoen echt een waarde A, B, C enz. krijgen. Ik zie niet wat ik niet goed heb gedaan in mijn makro en waarom ik helemaal geen waarde krijg voor seizoen. Snap je wat ik bedoel?
 
Met deze aanpassing krijg je A,B,C of D als seizoen:

Code:
Sub seizoenBepaler()
    Dim datumA As Date, datumV As Date
    Dim seizoen As String
    
    datumA = Format(InputBox("aankomst (mm/dd/yy): "), "mm/dd/yy")
    datumV = Format(InputBox("vertrek (mm/dd/yy): "), "mm/dd/yy")
        
    MsgBox "Aankomst =" & datumA
    MsgBox "Vertrek =" & datumV
    MsgBox "Seizoen = " & WorksheetFunction.Choose(DatePart("q", datumA), "A", "B", "C", "D")
End Sub
 
hallo Aad,

vervang in je vba code 5/1/2013 door #5/1/2013#
en dat bij alle datums.

groet sylvester
 
De voorwaaden die je gebruikt sluiten elkaar uit (logische fouten); die kun je met VBA code niet oplossen.

Code:
Sub seizoenBepaler()
    sn = Split(InputBox("aankomst en vertrek:" & String(4, vbLf) & "dd-mm dd-mm"))
    MsgBox Chr(65 + Abs(sn(0) = Format(DateSerial(2013, 1, 5), "dd-mm")) + 2 * Abs((sn(1) = Format(DateSerial(2013, 1, 7), "dd-mm"))))
End Sub
 
Het is dat je augustus bent vergeten??? maar anders zou het zo kunnen:

Code:
Sub seizoenBepaler()
    Dim datumA As Date, datumV As Date
    Dim seizoen As String
    
datumA = Format(InputBox("aankomst (mm/dd/yy): "), "mm/dd/yy")
datumV = Format(InputBox("vertrek (mm/dd/yy): "), "mm/dd/yy")

seizoen = Chr(64 + Month(datumA) + Month(datumV) - 9)

MsgBox "Aankomst = " & datumA & vbCrLf & "Vertrek = " & datumV & vbCrLf & "Seizoen = " & seizoen

End Sub

Niels
 
Hartelijk dank voor alle suggesties. Ik vind de oplossing van Niels erg elegant. Maar het is nog niet precies de oplossing voor het probleem. Het punt is namelijk dat er een onregelmaat in zit van een twee maands periode:
A = datumA is 1-31 mei, datumV is 1-31 mei (laagseizoen)
B = datumA is 1-31 mei, datumV is 1-30 juni (laag-/middenseizoen)
C = datumA is 1-30 juni, datumV is 1-30 juni (middenseizoen)
D = datumA is 1-30 juni, datumV is 1 juli-31 augustus (midden-/hoogseizoen)
E = datumA is 1 juli - 31 augustus, datumV is 1 juli - 31 augustus (hoogseizoen)
F = datumA is 1 juli – 31 augustus, datumV is 1-30 september (hoog-/middenseizoen)
G = datumA is 1-30 september, datumV is 1-30 september (middenseizoen)
 
minder elegant ;)

Code:
Sub seizoenBepaler()
    Dim datumA As Date, datumV As Date
    Dim seizoen As String
    
datumA = Format(InputBox("aankomst (mm/dd/yy): "), "mm/dd/yy")
datumV = Format(InputBox("vertrek (mm/dd/yy): "), "mm/dd/yy")

seizoen = IIf(Month(datumA) < 8, IIf(Month(datumV) >= 8, Chr(64 + Month(datumA) + Month(datumV) - 10), Chr(64 + Month(datumA) + Month(datumV) - 9)), Chr(64 + Month(datumA) + Month(datumV) - 11))

MsgBox "Aankomst = " & datumA & vbCrLf & "Vertrek = " & datumV & vbCrLf & "Seizoen = " & seizoen

End Sub

Niels
 
Bedankt Niels, prachtige oplossing. Het werkt perfect maar ik wil het ook graag snappen. De eerste oplossing (seizoen = Chr(64 + Month(datumA) + Month(datumV) - 9)) begreep ik omdat je het verschil in de maandwaarde liet opzoeken in ASCII.
(IIf(Month(datumA) < 8, IIf(Month(datumV) >= 8) begrijp ik niet...
 
De logica achter de macro = mei - mei moet 1 (A) zijn , mei - juni moet 2 (B) zijn
voor A 5+5 - 9 = 1
voor B 5+6 - 9 = 2
Omdat je van juni naar augustus een maand overslaat, augustus (8) moet hetzelfde zijn als juli (7) dus als datumV gelijk of groter is dan 8, moet er 1 meer vanaf dus -10 ipv -9
Dit gebeurt ook bij datumA en dan moeten er daar 2 meer vanaf dus -11 ipv -9

Hopelijk dat het duidelijk genoeg is.


Niels
 
Laatst bewerkt:
een stukje korter en waarschuinlijk duidelijker.

Code:
seizoen = Chr(64 + Month(datumA) + Month(datumV) - IIf(Month(datumA) < 8, IIf(Month(datumV) >= 8, 10, 9), 11))

Niels
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan