Brzmi jak ty są wprowadzani w błąd przez fakt, że podczas VBA sama obsługuje znaków Unicode, VBA środowisko programistyczne nie. Edytor VBA nadal wykorzystuje stare kodowanie znaków "strona kodowa" w oparciu o ustawienia regionalne w systemie Windows.
Z pewnością FileSystemObject
et. glin. w rzeczywistości obsługują znaki Unicode w nazwach plików, co ilustruje poniższy przykład. Z folderu zawierającego trzy pliki tekstowe
Nazwa pliku: 1_English.txt
Zawartość: London is a city in England.
Nazwa pliku: 2_French.txt
treści: Paris is a city in France.
Nazwa pliku: 3_Połish.txt
treści: Warsaw is a city in Poland.
Poniższy Kod VBA ...
Option Compare Database
Option Explicit
Sub scanFiles()
Dim fso As New FileSystemObject, fldr As Folder, f As File
Set fldr = fso.GetFolder("C:\__tmp\so33685990\files")
For Each f In fldr.Files
Debug.Print f.Path
Next
Set f = Nothing
Set fldr = Nothing
Set fso = Nothing
End Sub
... daje następujący wynik w oknie Immediate ...
C:\__tmp\so33685990\files\1_English.txt
C:\__tmp\so33685990\files\2_French.txt
C:\__tmp\so33685990\files\3_Polish.txt
Należy pamiętać, że oświadczenie Debug.Print
przekształca charakter ł
do l
ponieważ środowisko programistyczne VBA nie może wyświetlić ł
używając mojego systemu Windows locale (angielski amerykański).
Jednakże, poniższy kod nie otworzyć wszystkie trzy pliki z powodzeniem ...
Option Compare Database
Option Explicit
Sub scanFiles()
Dim fso As New FileSystemObject, fldr As Folder, f As File, ts As TextStream
Set fldr = fso.GetFolder("C:\__tmp\so33685990\files")
For Each f In fldr.Files
Set ts = fso.OpenTextFile(f.Path)
Debug.Print ts.ReadAll
ts.Close
Set ts = Nothing
Next
Set f = Nothing
Set fldr = Nothing
Set fso = Nothing
End Sub
... wyświetlanie
London is a city in England.
Paris is a city in France.
Warsaw is a city in Poland.
mnie źle, ja rzeczywiście zrobił to w pośpiechu, ale to nie było aby wskazać, że był to duplikat, miał wskazać możliwy kąt pracy, ale po bliższym przyjrzeniu się nie będzie dotyczył twojego problemu. Pozwól mi przyjrzeć się bliżej. Czy możesz opublikować swój kod? Albo w jaki sposób "przyciemniłeś" zmienną, której używasz do 'Dir'? Czy próbowałeś także * Files Scripting Object *? – R3uK
Ten link http://www.vbforums.com/showthread.php?555086-RESOLVED-Unicode-file-names & highlight = FindNextFileW/# 4 ... nie wydaje się interesujące, ale jest to VB, a nie tylko VBA. Istnieje również metoda konwersji specjalnego znaku, ale będzie działać tylko dla postaci, dla której wykonałeś transkodyfikację. W każdym razie wygląda na to, że FSO (Object Scripting Object) nie ma tego samego ograniczenia niż 'Dir', więc osobiście tak bym poszedł, jeśli nie jest to skomplikowane do zaimplementowania w kodzie! – R3uK
Cholera ... FSO ma taki sam problem ... Czy próbowałeś zadeklarować swoją wartość Dir jako Wariant? (dzikie przypuszczenie, ale w tym momencie wydaje mi się (przynajmniej dla mnie), że istnieje tylko VB lub Transcodification ...). Oto linki do transco/convert: http://www.pcreview.co.uk/threads/workaround-for-chdir-curdir-when-path-has-unicode-characters.3155241/#post-10639076 i http: //www.vbforums.com/showthread.php?596307-How-to-check-if-a-file-folder-with-unicode-filename-extists-getting-its-attributes&p=3683899&viewfull=1#post3683899 – R3uK