Czasami w zmiennej mamy nazwę pliku (np. plik.txt, bądź możemy mieć też podaną pełną ścieżkę wraz z nazwą pliku np. c:\katalog\podkatalog\plik.txt). I chcemy z tej nazwy pliku wyciągnąć samo rozszerzenie (np. txt). Bo np. w zależności od tego czy użytkownik wskazał plik tekstowy a graficzny nasze makro ma wykonać inną operację.
Jak najprościej sprawdzić jakie rozszerzenie ma nasz plik?
Najprościej jest wyciągnąć cały tekst po ostatnim znaku . (kropki)
Funkcja InStrRev podaje pozycję ostatniego wystąpienia wskazanego podciągu w ciągu znaków. Jeśli funkcja zwróci wartość 0 to znaczy, że w nazwie pliku nie było ani jednego znaku . czyli zmienna z nazwą pliku albo jest pusta albo zawiera nazwę pliku bez rozszerzenia (np. w folderze C:\Windows\System32\drivers\etc mamy plik hosts). Jeśli funkcja ta zwróci wartość wyższą od 0 to za pomocą funkcji Mid należy wyciągnąć wszystkie znaki od wartości zwróconej przez tę funkcję powiększoną o 1 do końca. Jeśli będziemy w naszym kodzie używać instrukcji select case do wykonania odpowiedniej czynności z zależności od uzyskanego rozszerzenia warto jest dodatkowo użyć funkcji lcase, która w ciągu tekstowym zamienia wszystkie litery na małe. Oto przykładowy kod:
Function PobierzRozszerzeniePliku(Plik As String) As String
Dim Ret As String
Dim pos As Long
pos = InStrRev(Plik, ".")
If pos = 0 Then
Ret = ""
Else
Ret = Mid(Plik, pos + 1)
End If
PobierzRozszerzeniePliku = LCase(Ret)
End Function
Sub TestPobierzRozszerzeniePliku()
Dim Plik As String
Dim Rozszerzenie As String
Plik = "c:\katalog\podkatalog\plik.TXT"
Rozszerzenie = PobierzRozszerzeniePliku(Plik)
MsgBox Rozszerzenie, vbInformation
End Sub