string = InputBox("Bestandsnaam aub :")
fout = "\/:*?<>"
For I = 1 To Len(naam)
If InStr(1, fout, Mid(string, I, 1)) > 0 Then
MsgBox ("Fout teken gebruikt op positie : ") & I
Exit Sub
End If
Next
Cobbe
Op 16/03/2008, heeft Jan B. verondersteld :
> Excellers,
>
> ik maak met een inputbox een bestandsnaam en zet die in een string:
> string = inputbox("bestandsnaam")
>
> deze string mag dus de volgende tekens niet bevatten:
> \ / : * ? " < > |
>
> Om dit te prgrammeren in VBA is het niet wenselijk om de functie "Instr" te
> gebruiken, deze kan slechts één karakter tegelijk opzoeken. De code wordt
> daardoor traag en lang.
>
> Iemand een idee hoe dit zo efficiënt mogelijk kan worden geprogrammeerd ?
> Alvast bedankt voor het meedenken.
aTmp = Array("\", "/", ":", "*", "?", Chr(34), "<", ">", "|")
sTmp = "a\" & Chr(34) & "/:b*?<>|c"
For lTmp = LBound(aTmp) To UBound(aTmp)
sTmp = Replace(sTmp, aTmp(lTmp), "")
Next
MsgBox sTmp
End Sub
--
groet, emil
<getest met office2000NL>
"Jan B." <jbronzwaer(dit weglaten)@home.nl> schreef in bericht
news:142F55F5-64F4-4455...@microsoft.com...
Excellers,
ik maak met een inputbox een bestandsnaam en zet die in een string:
string = inputbox("bestandsnaam")
deze string mag dus de volgende tekens niet bevatten:
\ / : * ? " < > |
Om dit te prgrammeren in VBA is het niet wenselijk om de functie "Instr" te
gebruiken, deze kan slechts één karakter tegelijk opzoeken. De code wordt
daardoor traag en lang.
Iemand een idee hoe dit zo efficiënt mogelijk kan worden geprogrammeerd ?
Alvast bedankt voor het meedenken.
--
met vriendelijke groet,
Jan B.
dat is de oplossing.
Bedankt voor je reactie
--
met vriendelijke groet,
Jan B.
"emil" schreef:
De routine werkt goed doch, zoals ik al vreesde, is het niet mogelijk om in
de variabele 'fout' het aanhalingsteken op te nemen. En dat is helaas ook een
niet-toegestaan karakter voor een filenaam.
De andere oplossing van emil werkt met een array en maakt dit wel mogelijk.
Dank voor je reactie.
--
met vriendelijke groet,
Jan B.
"Cobbe" schreef:
Jan B. plaatste dit op zijn scherm :
Wat laat toch nog een aardige mogelijkheid:
Sub TestOpTeken(strBestandsnaam)
If strBestandsnaam Like "*" & "[\/:* ?"" <>|]" & "*" Then
MsgBox "De bestandsnaam bevat één of meer ongeldige tekens"
End If
End Sub
Overigens kan in de oplossing van Cobbe wel worden getest op aanhalingstekens door
in de fout-string twee aanhalingstekens op te nemen:
fout = "\/:*""?<>"
Jan
jan was zeer hard aan het denken :
je gebruikt de [ en ] in "Like" om een groep tekens aan te geven. Dat is
mooi maar helaas krijgt de routine hierdoor weer een niéuw gebrek erbij:
zoals je al ziet gaat het erom een bestandsnaam vrij te maken van verboden
tekens. Omdat het om het opslaan van bestanden gaat die een titel krijgen via
een inptbox, gooien die haken roet in het eten: immers een bestandsnaam als
Jan[jan] wordt goedgekeurd en dat mag niet, want bij opslaan volgt een
foutmelding omdat er verboden tekens zijn gebruikt: de haken [ en ]). ik geef
je even de subroutine met jouw oplossing waar het feitelijk om gaat:
Sub invoerbox(Msg$, Title$, tekst$)
a = inputbox(Msg, Title, tekst)
If a Like "*" & "[\/:* ?""<>|]" & "*" Then
MsgBox "De bestandsnaam bevat één of meer ongeldige tekens"
a = inputbox(Msg, Title, a)
End If
tekst = a
End Sub
hoe kan ik nu binnen die Like-constructie ook de haken [ en ] opnemen ?
Zie jij nog iets ?
--
met vriendelijke groet,
Jan B.
"jan" schreef:
je vindingrijkheid wordt door jan (die andere) loffelijk aangevuld met een
oplossing voor het door mij geopperde bezwaartje (allemaal onkunde van mijn
kant) over het aanhalingsteken, dat dus niet zo bezwaarlijk blijkt te zijn en
waarover je niet repte omdat je natuurlijk dacht: die Jan B. snapt dat wel.
Wist ik toch zoveel van Excel als Cobbe, denk ik weleens, dan was het leven
een stuk gemakkelijker.
Je ziet hoeveel men je respecteert, evenals ik dat doe, want ondertussen ren
jij hier maar filantropisch rond om mensen te helpen, als geen ander. Chapeau.
Je bent je gewicht in goud waard, echter op dit forum mag helaas niet met
geld worden geschoven, Ik moet je dus financieel teleurstellen: ik mág je
niet eens betalen :)
mijn dank is echter groot.
--
met vriendelijke groet,
Jan B.
"Cobbe" schreef:
--
groet, emil
<getest met office2000NL>
"Jan B." <jbronzwaer(dit weglaten)@home.nl> schreef in bericht
news:5D585E77-B92A-41CA...@microsoft.com...
hoe moet de syntax van deze regel luiden om de haken ook te onderscheppen ?
If a Like "*" & "[\/:* ?""<>|]" & "*" Then
't lukt in ieder geval niet alsvolgt:
If a Like "*" & "[\/:* ?""<>|]" & "[" & "]" & "*" Then
--
met vriendelijke groet,
Jan B.
"emil" schreef:
If a Like "*" & "[\/:*[?""<>|]" & "*" Or a Like "*" & "]" & "*" Then
is de ultieme oplossing, denk ik .
mee eens ?
het kwartje is gevallen.
--
met vriendelijke groet,
Jan B.
"emil" schreef:
Dat lijkt inderdaad de oplossing.
Hieronder de code met daarin de vraag of je de tekens wilt laten verwijderen:
Sub TestOpTeken(strBestandsnaam)
Dim strFout As String
Dim i As Integer
strFout = "[\/:*?""<>|"
If strBestandsnaam Like "*[" & strFout & "]*" Or strBestandsnaam Like "*]*" Then
If MsgBox("De bestandsnaam bevat één of meer ongeldige tekens" _
& vbNewLine & "Wilt u die tekens verwijderen?", vbQuestion +
vbYesNo, _
"Ongeldige tekens") = vbYes Then
For i = 1 To Len(strFout) + 1
strBestandsnaam = Replace(strBestandsnaam, Mid("]" & strFout, i, 1), "")
Next
End If
End If
MsgBox strBestandsnaam
End Sub
Jan
nu is het plaatje compleet, geloof ik.
Bedankt voor het meedenken.
--
met vriendelijke groet,
Jan B.
"jan" schreef:
> Jan,