#excel #vba #unicode
Вопрос:
Я пытаюсь перечислить содержимое каталога в Windows. Все работает, как ожидалось, но когда я пытаюсь определить размер файлов ( Debug.Print FileLen(filepath amp; filename)
используя функцию FileLen()
, я получаю ошибку 53 во втором файле, потому что в его имени есть символ юникода (знак номера полной ширины U FF03). Есть идеи, как с этим справиться?
Содержимое каталога c:ZTest
:
1#.txt
2#.txt
Обратите внимание, что первый файл имеет «обычный» знак номера, а имя второго файла имеет знак номера полной ширины (U FF03). Вот код VBA, который отлично работает без второго Debug.Print
.
Sub ListFiles()
Dim filename As String
Dim filepath As String
filepath = "c:ZTest"
filename = Dir(filepath)
Do While filename <> ""
Debug.Print filename
Debug.Print FileLen(filepath amp; filename)
filename = Dir()
Loop
End Sub
Ответ №1:
Пожалуйста, попробуйте следующий способ. Объекты VBScript могут работать с символами, отличными от ASCII, в имени файла:
Sub ListFilesNonASCIIName()
Dim FSOLibrary As Object, fldObj As Object, fsoFile As Object
Dim foldPath As String
Set FSOLibrary = CreateObject("Scripting.FileSystemObject")
foldPath = "c:ZTest"
Set fldObj = FSOLibrary.GetFolder(foldPath)
For Each fsoFile In fldObj.files
Debug.Print fsoFile.Name, fsoFile.Size
Next
End Sub
Комментарии:
1. @Gecko Разве приведенный выше код не решил вашу проблему? Вы нашли время, чтобы проверить это?
2. Я протестировал его, и он хорошо работает, решая мою проблему.