Как использовать Range.Value для чтения ячейки Excel, содержащей буквы с акцентом? - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть список файлов в Excel, который мне нужно автоматизировать, и я не могу этого сделать для файлов с именами, содержащими буквы с акцентом.Например: если ячейка Excel содержит строку: RADOŚĆOPORANKU.txt Содержимое ячейки, считываемое Range.Value, равно RADOSCOPORANKU.txt, буквы с акцентом были преобразованы, т. Е. Ś в S и Ć в C. Dir (строка), конечно, не может найти этофайл.

Мой простой тест с двумя файлами, расположенными в следующем каталоге: D: \ Andre \ Szarada \ For Szarada \ Awaiting \

Алгебраф NOCSIERPNIOWA.xlsx в A65 и Алгебраф RADOŚĆOPORANKU.xlsx вA66 (примечание: только верхний текст находится в ячейках A65 и A 66)

Sub test()
    Dim str, filename As String
    str = Range("A65").Value
    filename = "D:\Andre\Szarada\For Szarada\Awaiting\Algebraf " & str & ".xlsx"
    MsgBox Dir(filename)
End Sub

Он отлично работает для A65, возвращающего имя файла, он возвращает "" для A66, не находящего файл с акцентированными буквами.Точно так же, если я удаляю акцентированные буквы как для ячейки A66, так и для фактического имени файла в каталоге, это также хорошо работает.

Что я делаю не так?

1 Ответ

0 голосов
/ 30 сентября 2019

Если вы хотите переместить файл из одной папки в другую, используйте FileSystemObject

Например:

A1

enter image description here

'Set reference to Microsoft Scripting Runtime
'  or, if this for distribution, convert to late-binding

Option Explicit
Sub fileMover()
    Dim FSO As FileSystemObject
    Dim FI As File, FO As File
    Dim sSrc As String, sDest As String
    Const sBasePath As String = "D:\Users\Ron\Desktop\"

sSrc = sBasePath & [A1] & ".txt"
sDest = sBasePath & "Temp\" & [A1] & ".txt"

Set FSO = New FileSystemObject

FSO.MoveFile sSrc, sDest

End Sub

В «чистом» VBA вы можете использовать функцию Name, но ограниченное тестирование здесь показывает, что у него тоже есть проблемы со специальными символами,как и MsgBox

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...