Gå til innhold

[Løst] MsgBox som varsler ved bruk av / \ < > : * " ? |


Anbefalte innlegg

Hei igjen.

Jeg kjører denne makroen for og opprette kunde. Det jeg ønsker er en MsgBox som varsler hvis noen prøver og sette inn  / \ < > : * " ? | i TextBox2.Text (Kundens navn)

Dette fordi navnet er med i lagringen av PDF fil og da stopper makroen har jeg smertelig erfart. :hm: 

Ble så usikker på dette at jeg håper noen kan hjelpe meg med dette.

På forhånd takk

 

RA

 

 

Private Sub CommandButton1_Click()

'sette inn opplysninger i kunderegister

Sheets("Kunderegister").Select

eRow = Sheets("Kunderegister").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Row

Cells(eRow, 1) = TextBox1.Text

Cells(eRow, 3) = TextBox2.Text

Cells(eRow, 4) = TextBox3.Text

Cells(eRow, 6) = TextBox4.Text

Cells(eRow, 7) = TextBox5.Text

Cells(eRow, 8) = TextBox6.Text

Cells(eRow, 9) = TextBox7.Text

Cells(eRow, 10) = TextBox8.Text

Cells(eRow, 14) = TextBox9.Text

 

MsgBox "Kunde er opprettet :)"

 

'nullstille "Opprette ny kunde"

TextBox1.Value = ""

TextBox2.Value = ""

TextBox3.Value = ""

TextBox4.Value = ""

TextBox5.Value = ""

TextBox6.Value = ""

TextBox7.Value = ""

TextBox8.Value = ""

TextBox9.Value = ""

 

'Sortere kunderegister

Columns("C:C").Select

    ActiveWorkbook.Worksheets("Kunderegister").Sort.SortFields.Clear

    ActiveWorkbook.Worksheets("Kunderegister").Sort.SortFields.Add Key:=Range("C2:C1000") _

        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    With ActiveWorkbook.Worksheets("Kunderegister").Sort

        .SetRange Range("A1:AA1000")

        .Header = xlYes

        .MatchCase = False

        .Orientation = xlTopToBottom

        .SortMethod = xlPinYin

        .Apply

    End With

    Range("C2").Select

    Sheets("Pakkseddel").Select

    Range("B7").Select

    

    Unload Me

 

End Sub

Lenke til kommentar
Videoannonse
Annonse

Hei igjen

 

Tillat meg å være litt streng. Vi skal ikke irettesette brukeren medmindre en ordentlig ulykke er i ferd med å skje. Vi skal lage ting slik at de ikke har muligheten til å gjøre noe galt. Det er mye følelser rundt bruk av dataprogrammer, og de aller fleste er med god grunn lette å mislike. Det medfører en del jobb. Jo enklere noe er å bruke, jo mer kompliserte er de å lage. Men det er en stor belønning i andre enden, du har laget en kul og populær applikasjon.

 

Her er en veldig nyttig greie, eventet KeyPress i en Userform -du finner den i userformmodulen. Dette eksemplet gjør at det er helt umulig å skrive tallene 2 eller 3 i Textbox1:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
    Case 50, 51
        KeyAscii = 0
    Case Else
End Select
End Sub

og hvordan vet man at 2 er keyascii 50? Man lager et tegnkart, som jeg har lagt ved her:

Tegnkart.xlsx

 

Beste hilsen Harald

 

Edit. Slurver med detaljer igjen. Over modulen, Textbox1 i venstre nedtrekksmeny, KeyPress i den høyre.

Endret av Harald Staff
Lenke til kommentar

Hei!

Jeg er prinsipielt enig med Harald, og så legger jeg ved en liten funksjon som du kan bruke for å sjekke om navnet inneholder de tegnene som er tillatt.

 

If Sjekknavn(textbox1.text)= false then ....

 

____________________________________________

 

Function Sjekknavn(Navn As String) As Boolean
 Dim OK As String
 Dim NO As String
 Dim NY As String
 Dim B As String
 
 'Du får vurdere om ÆØÅ skal være tillatte tegn...
 OK = "ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ -"
 
 For x = 1 To Len(Navn)
  B = UCase(Mid(Navn, x, 1))
  If InStr(1, OK, B) = 0 Then
   MsgBox ("Fint om du ikke bruker """ & B & """ i kundenavn:)")
   Sjekknavn = False
   Exit Function
  End If
 Next x
 
Sjekknavn = True
 
End Function
 
____________________________________________
Lenke til kommentar

Og litt mer i Haralds ånd kan du legge testen rett i TextBox2_Change.

Da får du bare skrevet de tegnene du tillater i strengen OK

 

 

Private Sub TextBox2_Change()
 Dim OK As String
 Dim NO As String
 Dim NY As String
 Dim B As String
 Dim Navn As String
 
 Navn = TextBox2.Text
 
 'Du får vurdere om ÆØÅ skal være tillatte tegn...
 OK = "ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ -"
 
 For x = 1 To Len(Navn)
  B = UCase(Mid(Navn, x, 1))
  If InStr(1, OK, B) = 0 Then
    TextBox2.Text = Left(Navn, Len(Navn) - 1)
  End If
 Next x
 
End Sub
Lenke til kommentar

Dårlig løsning. Hva hvis det kommer en som heter André? Den eneste skikkelige måten å løse det på er å omkalfatre strenger som inneholder forbudte tegn når filnavnet lages. Så kan folk hete hva de vil ellers.

 

 

 

Tillat meg å være litt streng.
Genialt ordspill. ;)
Lenke til kommentar

Helt greit og være "litt" streng Harald :) Prøver så godt jeg kan og gjøre dette så enkelt som mulig for brukerne samtidig som det ikke skal være rom for feil.

TAKK for alle forslag. Skal prøve meg fram litt med dette.

 

RA

Lenke til kommentar

Da ble det sånn :)

God helg.

 

Edit: Har valgt og informere om tegn som ikke er lov i  Brukermanualen. Brukere kan fort bli frustrerte over at de ikke får satt inn div. tegn. (Brukere kan lure på om det er feil med tastaturet) Ellers er dette en smart løsning til mitt bruk.  :)

 

 

 Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Select Case KeyAscii
    Case 34, 37, 42, 47, 58, 60, 62, 63, 92, 124
        KeyAscii = 0
    Case Else
End Select
End Sub
Private Sub CommandButton1_Click()
'sette inn opplysninger i kunderegister
Sheets("Kunderegister").Select
eRow = Sheets("Kunderegister").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Row
Cells(eRow, 1) = TextBox1.Text
Cells(eRow, 3) = TextBox2.Text
Cells(eRow, 4) = TextBox3.Text
Cells(eRow, 6) = TextBox4.Text
Cells(eRow, 7) = TextBox5.Text
Cells(eRow, 8) = TextBox6.Text
Cells(eRow, 9) = TextBox7.Text
Cells(eRow, 10) = TextBox8.Text
Cells(eRow, 14) = TextBox9.Text
 
MsgBox "Kunde er opprettet :)"
 
'nullstille "Opprette ny kunde"
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
TextBox6.Value = ""
TextBox7.Value = ""
TextBox8.Value = ""
TextBox9.Value = ""
 
'Sortere kunderegister
Columns("C:C").Select
    ActiveWorkbook.Worksheets("Kunderegister").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Kunderegister").Sort.SortFields.Add Key:=Range("C2:C1000") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Kunderegister").Sort
        .SetRange Range("A1:AA1000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("C2").Select
    Sheets("Pakkseddel").Select
    Range("B7").Select
    
    Unload Me
 
 
End Sub
Endret av Trelkrok
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...