Работа с именами файлов Unicode в VBA (с помощью Dir, FileSystemObject и т. д.)
Я переборе через файлы в папке (что означает, что я не знаю имен в папке), и есть файл с польским ł
символ.
на Dir
функция преобразует это в l
что означает, что имя файла не может быть найдено позже. Я объявил var, которому я назначаю значение dir в виде строки.
Я также пробовал FSO и getfolder, который также имеет ту же проблему.
Я также заметил файл диалоговое окно (установить в режим выбора папки) преобразует символ выше тоже.
это ошибка, или это что-то, что можно обойти?
1 ответов
похоже, вас вводит в заблуждение тот факт, что в то время как сам VBA поддерживает символы Юникода,среда разработки VBA нет. Редактор VBA по-прежнему использует старые кодировки символов "кодовая страница" на основе параметров локали в Windows.
конечно FileSystemObject
et. Эл. действительно поддерживает символы Юникода в именах файлов, как показано в следующем примере. С папкой, содержащей три простых текста файлы
имя файла: 1_English.txt
Содержание: London is a city in England.
имя файла: 2_French.txt
Содержание: Paris is a city in France.
имя файла: 3_Połish.txt
Содержание: Warsaw is a city in Poland.
следующий код 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
... производит следующие выходные данные в окне Immediate ...
C:\__tmp\so33685990\files_English.txt
C:\__tmp\so33685990\files_French.txt
C:\__tmp\so33685990\files_Polish.txt
отметим, что Debug.Print
инструкция преобразует ł
символ l
потому что среда разработки VBA не удается отобразить ł
использование моего языка Windows (US English).
однако, следующий код открывает все три файла ...
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
... отображение
London is a city in England.
Paris is a city in France.
Warsaw is a city in Poland.