|
| Substrings i VBA Fra : Thomas Christensen |
Dato : 05-08-01 10:49 |
|
Hej,
Jeg har forsøgt at skrive en funktion der kan checke et filnavn for evt.
ulovlige tegn ( f.eks: <, >, ?, [,],|,*,/) og derefter erstatte dem med et
lovligt tegn f.eks. "_" (underscore).
--------------------
Public Function checkFilename(brevNavn As String)
Dim illegal(9) As String
Dim counter As Integer
Dim pos As Variant
illegal(1) = "<"
illegal(2) = ">"
illegal(3) = "?"
illegal(4) = "["
illegal(5) = "]"
illegal(6) = ":"
illegal(7) = "|"
illegal(8) = "*"
illegal(9) = "/"
counter = 0
pos = 0
For counter = 1 To 9
pos = InStr(1, brevNavn, illegal(counter), vbTextCompare)
If pos <> 0 Then
MsgBox pos & " " & illegal(counter) & " " & brevNavn
MsgBox Replace("brevNavn", illegal(counter), "_", [, [, [, ]]])
End If
Next counter
End Function
----------------------------
Formålet er at rette i filnavnet, før Excel arket bliver gemt for at undgå
fejlmeddelelser.
Problemet er at når jeg kører funktionen, som er en del af en større makro,
så er det som om linien
MsgBox Replace("brevNavn", illegal(counter), "_", [, [, [, ]]])
ignoreres fuldstændigt.
Er det fordi at Replace ikke kan bruges i VBA, men kun i VB ?
Hvad kan jeg gøre istedet for ?
Jeg håber at der er nogen der kan hjælpe.
Mvh
Thomas Christensen
| |
Harald Staff (05-08-2001)
| Kommentar Fra : Harald Staff |
Dato : 05-08-01 20:58 |
|
Hei Thomas
Du behøver ikke sjekke posisjonen for å gjøre replace. Bare be om replace,
så skjer det om det behøves og intet ellers.
En function skal returnere noget, her en string.
Men hovedfeilen er at "Brevnavn" står i klammer:
MsgBox Replace("brevNavn", illegal(counter), "_"
da sjekkes ikke variebelen, men teksten "brevnavn".
Her er en justert versjon:
Sub Test()
MsgBox checkedFilename("Hei?der>/Thomas[Christensen:/")
End Sub
Public Function checkedFilename(brevNavn As String) As String
Dim illegal(9) As String
Dim counter As Integer
checkedFilename = brevNavn
illegal(1) = "<"
illegal(2) = ">"
illegal(3) = "?"
illegal(4) = "["
illegal(5) = "]"
illegal(6) = ":"
illegal(7) = "|"
illegal(8) = "*"
illegal(9) = "/"
For counter = 1 To 9
checkedFilename = Replace(checkedFilename, illegal(counter), "_")
Next counter
End Function
.... og så skal du vurdere hvorvidt flere tegn er forbudt. Punktum ?
Mellomrom ?
HTH. Beste hilsen Harald
"Thomas Christensen" <tc@elvis.dk> wrote in message
news:9kj4mm$2kg3$1@news.cybercity.dk...
> Hej,
>
> Jeg har forsøgt at skrive en funktion der kan checke et filnavn for evt.
> ulovlige tegn ( f.eks: <, >, ?, [,],|,*,/) og derefter erstatte dem med
et
> lovligt tegn f.eks. "_" (underscore).
>
> --------------------
> Public Function checkFilename(brevNavn As String)
>
> Dim illegal(9) As String
> Dim counter As Integer
> Dim pos As Variant
>
> illegal(1) = "<"
> illegal(2) = ">"
> illegal(3) = "?"
> illegal(4) = "["
> illegal(5) = "]"
> illegal(6) = ":"
> illegal(7) = "|"
> illegal(8) = "*"
> illegal(9) = "/"
>
> counter = 0
> pos = 0
>
> For counter = 1 To 9
> pos = InStr(1, brevNavn, illegal(counter), vbTextCompare)
> If pos <> 0 Then
> MsgBox pos & " " & illegal(counter) & " " & brevNavn
> MsgBox Replace("brevNavn", illegal(counter), "_", [, [, [, ]]])
> End If
> Next counter
>
> End Function
> ----------------------------
>
> Formålet er at rette i filnavnet, før Excel arket bliver gemt for at undgå
> fejlmeddelelser.
> Problemet er at når jeg kører funktionen, som er en del af en større
makro,
> så er det som om linien
>
> MsgBox Replace("brevNavn", illegal(counter), "_", [, [, [, ]]])
>
> ignoreres fuldstændigt.
>
> Er det fordi at Replace ikke kan bruges i VBA, men kun i VB ?
> Hvad kan jeg gøre istedet for ?
>
> Jeg håber at der er nogen der kan hjælpe.
>
> Mvh
> Thomas Christensen
>
>
| |
|
|