Avatar billede kim1a Ekspert
29. april 2013 - 11:51 Der er 1 kommentar og
1 løsning

Struktur if inden i if (vba)

Kære eksperter,

Jeg har en VBAkode (del af en længere smøre) hvor jeg ønsker en filtreringsdato alt efter forskellige muligheder.

Først skal den spørge til datoen jeg ønsker lageret opgjort pr, og derefter om jeg ønsker det opgjort til månedsafslutning eller blot "alm" daglig opfølgning.

Min kode ser sådan ud (men virker ikke - den beder om et ekstra If. Jeg kan ikke spotte min sikkert åbenlyse fejl.

Datoinput:        Dato = Format(InputBox("Hvilken dato skal lageret opgøres efter", "Dato", "DD-MM-ÅÅÅÅ"), "DD-MM-YYYY")
    If IsDate(Dato) Then
    IndeværendeÅr = Year(Dato)
    IndeværendeMåned = Month(Dato)
    IndeværendeDag = Day(Dato)
        MSG1 = MsgBox("Skal lageret filtreres til månedsafslutning?", vbYesNo, "lagerfilterdato")
        If MSG1 = vbYes Then
            If IndeværendeMåned + 1 = 13 Then
            LagerFilterdato = Format("01-01-" & IndeværendeÅr + 1, "DD-MM-YYYY")
            Else: LagerFilterdato = Format("01-" & IndeværendeMåned + 1 & "-" & IndeværendeÅr, "DD-MM-YYYY")
        Else: LagerFilterdato = Format(Dato, "DD-MM-YYY")
    Else: MsgBox ("Ikke rigtig datoformat"): GoTo Datoinput
    End If

Hvem kan lige spotte fejlen?

Jeg har forsøgt at arbejde hen imod ElseIf, men forstår den nok ikke til bunds. Så har du god tid vil jeg gerne se strukturen til denne også.
Avatar billede supertekst Ekspert
29. april 2013 - 12:57 #1
Sub test()

Datoinput:
    Dato = Format(InputBox("Hvilken dato skal lageret opgøres efter", "Dato", "DD-MM-ÅÅÅÅ"), "DD-MM-YYYY")
    If IsDate(Dato) Then
        IndeværendeÅr = Year(Dato)
        IndeværendeMåned = Month(Dato)
        IndeværendeDag = Day(Dato)
        MSG1 = MsgBox("Skal lageret filtreres til månedsafslutning?", vbYesNo, "lagerfilterdato")
        If MSG1 = vbYes Then
            If IndeværendeMåned + 1 = 13 Then
                LagerFilterdato = Format("01-01-" & IndeværendeÅr + 1, "DD-MM-YYYY")
            Else
                LagerFilterdato = Format("01-" & IndeværendeMåned + 1 & "-" & IndeværendeÅr, "DD-MM-YYYY")
            End If
    Else
        LagerFilterdato = Format(Dato, "DD-MM-YYY")
       
'-------> måske her....
        Else: MsgBox ("Ikke rigtig datoformat"): GoTo Datoinput
    End If

End Sub
Avatar billede kim1a Ekspert
29. april 2013 - 13:09 #2
Jeg kunne ikke se hvad jeg skulle sætte ind, så i stedet afsluttede jeg hver If med en Endif og så kørte det.

Så den kom altså til at se således ud:
Datoinput:        Dato = Format(InputBox("Hvilken dato skal lageret opgøres efter", "Dato", "DD-MM-ÅÅÅÅ"), "DD-MM-YYYY")
    If IsDate(Dato) Then
    IndeværendeÅr = Year(Dato)
    IndeværendeMåned = Month(Dato)
    IndeværendeDag = Day(Dato)
        MSG1 = MsgBox("Skal lageret filtreres til månedsafslutning?", vbYesNo, "lagerfilterdato")
        If MSG1 = vbYes Then
            If IndeværendeMåned + 1 = 13 Then
            LagerFilterdato = Format("01-01-" & IndeværendeÅr + 1, "DD-MM-YYYY")
            Else: LagerFilterdato = Format("01-" & IndeværendeMåned + 1 & "-" & IndeværendeÅr, "DD-MM-YYYY")
        End If
        Else: LagerFilterdato = Format(Dato, "DD-MM-YYY")
    End If
    Else: MsgBox ("Ikke rigtig datoformat"): GoTo Datoinput
    End If
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester