Avatar billede folj Forsker
24. marts 2014 - 11:06 Der er 14 kommentarer og
2 løsninger

Inputbox - VBA - ved tryk på cancel (eller annuler)

Lige et hurtigt spørgsmål til eksperterne.

Jeg har en Inputbox, som bruger kan udfylde hvis han vil have en personlig linie med i en system-genereret mail.

Da udfyldelse af inputbox er valgfri, har jeg brug for at kunne teste om inputbox blot ikke er udfyldt, eller om der blev trykket på inputboxens "Cancel-knap".
Jeg vil nemlig afbryde afviklingen hvis der benyttes cancel

Her er min test-sub:
Sub TestCancelInputbox()
' Tester om inputbox returnerer cancel ved klik på cancel

Answ = InputBox("tast tekst")
 
If Answ = vbCancel Then
  MsgBox "Canceled"
Else
  MsgBox "Vi kører"
End If

End Sub


Men den koden returnerer altid svaret "Vi kører"...
Hvordan skal jeg så lave en sikker test ?
Avatar billede Dan Elgaard Ekspert
24. marts 2014 - 11:56 #1
En InputBox giver 'False' som svar, hvis brugeren trykker på [Cancel].

Dette kan testes med:

If Answ = "False" Then...
Avatar billede folj Forsker
24. marts 2014 - 12:18 #2
@pistolprinsen:
Jeg tror ikke du har kørt testkoden:
Sub TestCancelInputbox()
' Tester om inputbox returnerer cancel ved klik på cancel

Answ = InputBox("tast tekst")
 
If Answ = "False" Then
  MsgBox "Canceled"
Else
  MsgBox "Vi kører"
End If

End Sub

ovenstående returnerer også beskeden "Vi kører"

Har også testet med
If Answ = False Then, altså uden anførselstegn ør og efter False
Avatar billede Dan Elgaard Ekspert
24. marts 2014 - 12:43 #3
Hmmmm....

InputBox funktionen virker åbenbart anerledes end InputBox metoden (som jeg plejer, at bruge).

Det ser ud til, at du skal teste på vbNullString:

If Answ = vbNullString Then
  MsgBox "Canceled"
Else
  MsgBox "Vi kører"
End If
Avatar billede folj Forsker
24. marts 2014 - 13:16 #4
tja...
men den gør ikke det jeg ledte efter.

Jeg ledte jo efter en metode til at teste om inputbox ikke var udfyldt eller der var valgt "Cancel".

If Answ = vbNullString Then
gør tilsyneladende det samme som
If Answ = "" Then


Bruger skal jo have mulighed for at svare:
send autogenereret mail, uden at jeg tilføjer noget til teksten(ved at undlade at skrive noget i inputbox).

Cancel skal bruges hvis bruger siger:
Ups, jeg vil da ikke sende en mail.
Avatar billede Dan Elgaard Ekspert
24. marts 2014 - 13:30 #5
???
Jeg forstår ikke???

Det virker hos mig - hvis der ikke står noget i InputBox, og brugeren vælger [Annuller], så virker testen da...
Avatar billede folj Forsker
24. marts 2014 - 16:22 #6
Så hør lige godt efter...
Bruger skal kunne vælge hele 3 forskellige muligheder med hver deres forløb:
1. Han kan tilføje en kort tekst til en mail, der beskriver de ændringer han har lavet i vores plan (excel-fil).

2. han kan vælge at sende opdateringsmailen uden nogen tilføjelse til teksten (han skriver ikke nogen tekst i inputbox).
Så genereres maien kun med standard-indholdet.

3. han kan vælge at annullere mail-genereringen ved at trukke "Cancel"

Som det er i øjeblikket kan min kode (If Answ = vbNullString) ikke kende forskel på seance 2 og 3.
Avatar billede folj Forsker
24. marts 2014 - 17:01 #7
Jeg har selv lige kreeret en NØD-løsning, Jeg understregede nødløsning, for jeg synes ikke den er særlig køn.

Sub TestCancelInputbox()
' Tester om inputbox returnerer cancel ved klik på cancel

Answ = InputBox("tast tekst")
 
If Answ = "" Then
  If Not MsgBox("vil du sende standard opdaterings-mail uden beskrivelse af ændringer", vbYesNo + vbDefaultButton2) = vbYes Then
  MsgBox "Proceduren blev stoppet"
  Exit Sub
  End If
Else
  MsgBox "Vi kører"
End If
  MsgBox "Vi kører videre uden tilføjelse"
End Sub

Den er ikke særlig køn fordi den spørger i flere trin, så brugeren udsættes for at skulle ta tstilling til flere på hinanden følgende spørgsmål.

Der er stadig en lille præmie til den der kan lave en pæn løsning i stil med min første testkode...
Avatar billede RogerWilco Seniormester
24. marts 2014 - 18:41 #8
If StrPtr(Answ) = 0 Then
  MsgBox "cancel"
  Else
  If Answ = "" Then MsgBox "empty" Else MsgBox Answ
  End If
Avatar billede kabbak Professor
24. marts 2014 - 18:42 #9
Stjålet fra nettet og rettet til

Sub inputbox_verification()

txt = InputBox("type the text")

If StrPtr(txt) = 0 Then
MsgBox "if it entenrs here then the user pressed cancel"
Exit Sub
End If

If txt = "" Then
MsgBox "if enters here the user left in blank"
End If

If Text <> "" Then
MsgBox "if enters here the user entered some text"
End If

End Sub

http://www.ozgrid.com/forum/showthread.php?t=15628
Avatar billede Dan Elgaard Ekspert
24. marts 2014 - 19:00 #10
Så faldt 10-øren :-)

Men, løsningen er der så 2 andre, der har givet :-)

Undskyld forvirringen...
Avatar billede folj Forsker
24. marts 2014 - 21:43 #11
@kabbak og RogerWilco:
I er nogle genier. smid lige nogle svar.

@RogerWilco: Jeg fulgte dit link, og fandt  nedenstående vigtige "guldkorn":
If the cancel button is clicked then InputBox returns a zero length string, so just check on that.

og det virker hver gang...
Avatar billede folj Forsker
24. marts 2014 - 21:46 #12
lige en rettelse...
Det var jo kabbak er leverede det omtalte link, og det er helt OK at du har stjålet det fra et sted på nettet. Jeg havde blot ikke selv fået tanken at søge hjælp andre steder end eksperten.dk, men her var du smartere end jeg.
Avatar billede kabbak Professor
25. marts 2014 - 10:59 #13
et svar ;-))
Avatar billede folj Forsker
25. marts 2014 - 14:46 #14
@RogerWilco:
Jeg mangler stadig et svar fra dig, så du kan få andel i points.
Det var jo dig der kom først med dt brugbart svar.

At der så senere kom et mere uddybende svar fra kabbak gør jo ikke dit svar mindre rigtigt...
Avatar billede RogerWilco Seniormester
25. marts 2014 - 18:12 #15
(c:
Avatar billede folj Forsker
25. marts 2014 - 22:28 #16
@kabbak og RogerWilco:
Points blev fordelt, tak for indsatsen til Jer begge to...
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