Avatar billede macho Praktikant
28. januar 2010 - 08:55 Der er 21 kommentarer og
1 løsning

Formularfelt - tillad kun tal og bogstaver (evt. VBA - makro)

Hej,

Jeg søger en måde at kontrollere input i et tekst-felt (formular i Word 2003), således, at det KUN er mellem, tal og bogstaver, som accepteres i feltet? Grunden til mit spørgsmål er, at feltet bruges til at danne filnavn for et worddokument.

Help...
Avatar billede tjp Mester
28. januar 2010 - 11:10 #1
Well, et regulært udtryk kan gøre det:

Private Sub TextBox1_Change()
  Dim myRegExp: Set myRegExp = New RegExp
  myRegExp.IgnoreCase = True
  myRegExp.Global = True
  myRegExp.Pattern = "^[\w\d ]+$"
 
  If Not myRegExp.Test(TextBox1.Text) Then
      MsgBox "Fejl i input!"
  End If
End Sub
Avatar billede macho Praktikant
28. januar 2010 - 12:55 #2
Jeg forstår det ikke helt - hvordan ændrer jeg denne linje, så det passer til mit tekstfelt (Emne1):

If Not myRegExp.Test(TextBox1.Text) Then

?
Avatar billede macho Praktikant
28. januar 2010 - 16:52 #3
Hhmmm...

Har prøvet med dette:


******************
Private Sub TextBox1_Change()

  Dim myRegExp: Set myRegExp = New RegExp
  myRegExp.IgnoreCase = True
  myRegExp.Global = True
  myRegExp.Pattern = "^[\w\d ]+$"
 
  If Not myRegExp.Test(EMNE.Text) Then
      MsgBox "Fejl i input!"
  End If

End Sub
******************

men får følgende fejl, når jeg kører makroen:

Compile Error:
User-defined type not defined

Det er dette, som makroen stopper ved (markeres når fejlen kommer):
New RegExp

Nogen idé?
Avatar billede tjp Mester
28. januar 2010 - 16:53 #4
Har du prøvet med?:
If Not myRegExp.Test(Emne1.Text) Then
Avatar billede tjp Mester
28. januar 2010 - 16:57 #5
Samt ændre:
Private Sub TextBox1_Change()
til:
Private Sub Emne1_Change()

Og så skal du også lige referere til 'Microsoft VBScript Regular Expressions 5.5' under 'Tools >> References...'

Så tror jeg den er ved at være der... :-)
Avatar billede macho Praktikant
28. januar 2010 - 17:09 #6
Okay - umiddelbart ingen ændringer. Jeg skal lige høre, om en Private Sub må/kan ligge i et modul under normal.dot?
Avatar billede macho Praktikant
28. januar 2010 - 20:35 #7
Har nu refereret til 'Microsoft VBScript Regular Expressions 5.5' under 'Tools >> References...'

Men nu stopper den her (linjen markeres gult):
If Not myRegExp.Test(Emne1.Text) Then

?
Avatar billede tjp Mester
28. januar 2010 - 22:33 #8
Skal lige høre.. Du har en Userform med en Textbox kaldet Emne1, right?
Avatar billede macho Praktikant
28. januar 2010 - 22:47 #9
Ja, lige præcis :-)
Avatar billede tjp Mester
28. januar 2010 - 23:20 #10
Hmm, så fatter jeg O. ;-)

Prøv i Object view i VBE at dobbeltklikke Emne1 textbox'en. Så skulle du meget gerne havne i Emne1_Change() rutinen. Gør du det?
Avatar billede macho Praktikant
28. januar 2010 - 23:34 #11
Det her forstår jeg ikke helt hvad du mener med:

Prøv i Object view i VBE at dobbeltklikke Emne1 textbox'en

?
Avatar billede tjp Mester
28. januar 2010 - 23:38 #12
Forresten, hvis strengen ikke må indeholde _ skal pattern ændres.
Desuden ku man også slette det forkerte tegn...
Altså noget a la:

Private Sub Emne1_Change()
  Dim myRegExp: Set myRegExp = New RegExp
  myRegExp.IgnoreCase = True
  myRegExp.Global = True
  myRegExp.Pattern = "^[A-ZÆØÅ\d ]+$"

  If Not myRegExp.Test(Emne1.Text) Then
      MsgBox "Fejl i input!"
      Emne1.Text = Left(Emne1.Text, Len(Emne1.Text) - 1)
  End If

End Sub
Avatar billede macho Praktikant
28. januar 2010 - 23:45 #13
Det gør desværre ingen forskel med den ekstra linje, da rutinen stadig stopper ved:
If Not myRegExp.Test(Emne1.Text) Then

når jeg kører sub'en.
Avatar billede tjp Mester
29. januar 2010 - 00:08 #14
Er der nogen fejlmeddelelse?
Avatar billede tjp Mester
29. januar 2010 - 00:16 #15
Det er vel ikke fordi at der er sat et Breakpoint?
Avatar billede tjp Mester
29. januar 2010 - 00:20 #16
Med "Prøv i Object view i VBE at dobbeltklikke Emne1 textbox'en" mente jeg at du i designview, altså der hvor man kan hive knapper, textboxe og andet ind på formen, skulle dobbeltklikke på Emne1 for at komme til den rigtig rutine.
Avatar billede macho Praktikant
29. januar 2010 - 00:23 #17
Ingen fejlmeddelelse - ingen breakpoints.
Avatar billede tjp Mester
29. januar 2010 - 00:39 #18
Og hvad sker der hvis du for sjov skifter hele betingelsen ud med True og fjerner alt med Emne1.Text?

Private Sub Emne1_Change()
  Dim myRegExp: Set myRegExp = New RegExp
  myRegExp.IgnoreCase = True
  myRegExp.Global = True
  myRegExp.Pattern = "^[A-ZÆØÅ\d ]+$"

  If True Then
      MsgBox "Fejl i input!"
  End If

End Sub
Avatar billede macho Praktikant
29. januar 2010 - 00:50 #19
Prøver i morgen.
Avatar billede macho Praktikant
29. januar 2010 - 07:49 #20
Okay, så får jeg msgboxen "Fejl i input" - uanset hvad der står i feltet. Hvis feltet ikke findes, så er det det samme - altså msgbox'en.

?
Avatar billede macho Praktikant
29. januar 2010 - 08:28 #21
Nu forstår jeg pludselig problemet. Som jeg skrev i mit spørgsmål, så er det et TEKSTFELT (tekstfelt i formular) og ikke en tekstboks via kontrolelementer jeg har oprettet. Derfor hele miseren.

Nu har jeg så prøvet med en tekstboks via kontrolelementer og her kan jeg godt få det hele til at virke, men jeg har et problem:
Tekstboksen (Emne1) skal jeg kunne kopiere fra ét dokument til et andet nyoprettet hvor der også skal valideres på indholdes i Emne1. Derfor spørger jeg, om det er muligt, at valideringen kan ligge i et modul i normal.dot?
Avatar billede macho Praktikant
31. januar 2010 - 22:15 #22
tjp, jeg er ked af, at vi fik talt "ved siden af hinanden", men hvis ikke du eller en anden umiddelbart har en løsning på mit problem, må jeg vælge det næste-bedste, nemlig at lave en "søg og erstat" i mit tekst-felt - dette er dog ikke optimalt, men væsentlig bedre end íngenting.
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
Tag et kursus i Word og øg effektiviteten

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