Avatar billede finb Ekspert
17. december 2019 - 14:12 Der er 12 kommentarer

VBA - Do While ? Select Case ?

Jeg ønsker en LOOP med en InputBox.
Der kan være 0, 1 eller flere fejl i brugerens input.
Der skal Loop'es, indtil der tastes korrekt.
Skitse:

Do while ? Input (loop indtil fejlfri input):
  Betingelse1 (hvis fejl, loop tilbage til Input, ellers Tekstt="A"
  Betingelse2 (hvis fejl, loop tilbage til Input, ellers Tekstt="B"
  ...
  BetingelseN (hvis fejl, loop tilbage til Input, ellers Tekstt="N"
  (hvis fejlfrit gennemløb, kør resten af makroen)
End While ?

Skal jeg bruge:
Do While ? eller While do ? eller Select Case ?
eller:

Select Case indlejret i Do While-loop'et ?

eller hvordan ?
Jeg er kørt fast. Tak finb
Avatar billede Jan Hansen Ekspert
17. december 2019 - 15:27 #1
Hej Fin

Tror du skal prøve noget ala

Dim Flag as Boolean
Dim MyValue as String,Tekst as String
Flag=True

Do While Flag=True
      MyValue=Inputbox("din tekst")
      Select Case MyValue
            Case "Betingelse"
                  Tekst1="A"
                  Flag=False
            Case "Betingelse"
                  Tekst1="B"
                  Flag=False
      End Select
Loop
Avatar billede finb Ekspert
18. december 2019 - 13:52 #2
Genialt !
Tak Jan
finb
Avatar billede Jan Hansen Ekspert
18. december 2019 - 22:23 #3
Velbekomme
Avatar billede finb Ekspert
02. januar 2020 - 13:23 #4
Hej Jan

Jeg har testet dit forslag, det er tanken, at

DoWhile skal blive ved med at spørge (via InputBox) om
Betingelse1, indtil Betingelse1 er udfyldt korrekt,
dernæst skal DoWhile blive ved med at spørge om Betingelse2,
indtil Betingelse2 er opfyldt, osv. osv.

Men DEFAULT-værdien i Inputbox forbliver den samme, selvom
jeg angiver en anden tekst før FLAG (bool) ?

Ved fejl i Betingelse1 skal InputBox vise Default-værdi 1,
Ved fejl i Betingelse2 skal InputBox vise Default-værdi 2,
osv. osv.
-men det kan jeg ikke helt få til at virke ?
Avatar billede Jan Hansen Ekspert
02. januar 2020 - 13:36 #5
må jeg se din tilpassede kode kode?
Avatar billede finb Ekspert
03. januar 2020 - 12:00 #6
Public Sub cpr_Testinggg()  '  Public Sub SelectCase_in_DoWhile_()

Dim Flag As Boolean
Dim MyValue As Variant ' Variant, fordi indtasteren kan komme til at indtaste andet end cifre
Dim Tekst_1 As Variant

Flag = True
Tekst_1 = "init  Tekst1"

'Test, om cpr er korrekt:

Do While Flag = True
      MyValue = InputBox(Tekst_1, "C P R", 1234567890)

      Select Case MyValue
           
            Case Is < 32
                  Tekst_1 = "DAG er ok, < 32"
                  Flag = False
                   
            Case Is > 31
                  Tekst_1 = "fejl: DAG > 31"
                  Flag = False
   
    ' her skal loop'es tilbage til inputbox,
    ' og Tekst_1 i inputbox skal blive til: "fejl: DAG > 31",
    ' men Tekst_1 i inputbox forbliver "init  Tekst1" ????
    ' Hvad gør jeg forkert ?
   
   
''''' Og senere i Sub'en:
    ' Hvis DAG < 32 og MÅNED < 13, skal der testes for længde (=10 cifre)
                   
            Case Is = Len(MyValue) <> 10
                Tekst_1 = "Indtast 10 cifre"
                Flag = False
     
    ' Altså: De forskellige "case is" skal testes,
    ' og når fejl findes, skal InputBox dukke op med den aktuelle "Tekst_1"
   
            ' Og test Modulus:
            'case is (her testes, om cpr er validt, såvidt jeg husker:
            ' modulus (sum(7*ciffer_1, 6*ciffer_2, 5*ciffer_3, osv.) ; 11)=0
            ' Tekst_1 = "Fejl, Modulus forkert"
           
    End Select
Loop

MsgBox "Du har indtastet: " & MyValue & vbCrLf & Tekst_1

End Sub
'Hvorfor når ny "Tekst_1" ikke op i nye InputBox ?
Tak
Avatar billede Jan Hansen Ekspert
03. januar 2020 - 12:25 #7
Her skal flag vel ikke sættes?      den er jo ikke  ok

            Case Is > 31
                  Tekst_1 = "fejl: DAG > 31"
                  Flag = False
Avatar billede Jan Hansen Ekspert
03. januar 2020 - 12:27 #8
lige så Her
            Case Is = Len(MyValue) <> 10
                Tekst_1 = "Indtast 10 cifre"
                Flag = False
Avatar billede Jan Hansen Ekspert
03. januar 2020 - 12:30 #9
Husk Flag=False gør du forlader loop'en

Jeg ville nok lave det i en userbox!!

Kommer lige med et bud lidt senere!!
Avatar billede Jan Hansen Ekspert
03. januar 2020 - 14:51 #10
Avatar billede finb Ekspert
06. januar 2020 - 14:19 #11
Hej Jan,
det ser flot og omfattende ud !
Jeg skal lige se det igennem,
så vender jeg tilbage.
Tak  finb
Avatar billede finb Ekspert
07. januar 2020 - 14:19 #12
Hej Jan
tak for dit svar,
det er næsten, hvad jeg søger.
Tak  finb
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