Jest to oczywiście nawiązanie do napisanej wcześniej funkcji sprawdzającej czy takie znaki występują (dostępna tutaj). Tym razem wersja konwertująca niedozwolony znak na podkreślenie, bez żadnych komunikatów, wygodna do użycia w pętli itp.
Function SkonwertowanaNazwaPliku(SprawdzanaNazwa As String) As String Dim tbl As Variant Dim NrZn As Long Dim Dlugosc As Long Dim Znak As String * 1 Dim tblZnak As Variant Dim NiedozwolonyZnak As Boolean tbl = Array("#", "%", "&", "*", ":", "<", ">", "?", "/", "\", "{", "|", "}") Dlugosc = Len(SprawdzanaNazwa) For NrZn = 1 To Dlugosc Znak = Mid(SprawdzanaNazwa, NrZn, 1) NiedozwolonyZnak = False For Each tblZnak In tbl If tblZnak = Znak Then NiedozwolonyZnak = True Exit For End If Next If NiedozwolonyZnak Then SkonwertowanaNazwaPliku = SkonwertowanaNazwaPliku & "_" Else SkonwertowanaNazwaPliku = SkonwertowanaNazwaPliku & Znak End If Next End Function |
Pingback: Akademia VBA » Niedozwolone znaki w nazwie pliku
A nie lepiej zastosować Replace? Kod jest wówczas znacznie krótszy, bo nie wykonuje pętli po wszystkich znakach. Ja dodatkowo używam tablicy zamienników, co przy zamianie wszystkich znaków na podkreślenie jest oczywiście zbędne:
Function ZamZnakiNiedozwolone(wejString As String) As String
Dim iCounter As Integer
Dim tblZabr As Variant
Dim tblZam As Variant
tblZabr = Array("#", "%", "&", "*", ":", "<", ">", "?", "/", "\", "{", "|", "}")
tblZam = Array("(hash)", "proc", "and", "", "", "", "", "", "", "", "", "", "")
For iCounter = LBound(tblZabr) To UBound(tblZabr)
wejString = Replace(wejString, tblZabr(iCounter), tblZam(iCounter))
Next iCounter
ZamZnakiNiedozwolone = wejString
End Function