Страницы: 1
RSS
Заменить текст кодировке utf-8 с помощью Replace
 
Есть xml файл с кодировкой UTF-8. Пытаюсь сделать макрос, который будет в  этом файле менять фразу "Заменить это" на "Заменено" с помощью функции  Replace. Ничего не получается, макрос запускается, но исходный файл  остается без изменений.

Если все то же самое проделать с файлом с кодировкой ANSI, то работает.
Если использовать латинские буквы, т.е. попытаться заменить фразу "Zamenit eto" на "Zameneno", то тоже работает.
Подскажите в чем может быть проблема.

Текст макроса:
Код
Sub Замена()  
  file = "Для замены.xml"
  Path = ActiveWorkbook.Path & "\" & file
  
  Open Path For Input As #1
  s = Input(LOF(1), 1)
  NewFile = Replace(s, "Заменить это", "Заменено")
  Close #1
  
  Open Path For Output As #2
  Print #2, NewFile
  Close #2  
End Sub

xml файл не дает прикрепить почему-то, там всего три строки
Код
Это не надо менять
Заменить это
Это тоже не надо менять
 
Почитайте эту тему.

Посмотрите у Игоря на сайте Excelvba.ru макрос для смены кодировки файла. Этот макрос можно модифицировать, чтобы он "по дороге" менял текст.
Изменено: sokol92 - 14.09.2020 16:04:43
Владимир
 
С xml надо так работать
Код
Sub Замена()
    file = "Для замены.xml"
    Path = ActiveWorkbook.Path & "\" & file
    With CreateObject("Microsoft.XMLDOM")
        .Load Path
        XML = .XML
        NewXML = Replace(XML, "Заменить это", "Заменено")
    End With

    With CreateObject("Microsoft.XMLDOM")
        .LoadXML NewXML
        .Save Path
    End With
End Sub
 
Цитата
doober написал:
С xml надо так работать
После выполнения макроса xml файл становится пустым. Подозреваю, что здесь

Код
NewXML = Replace(XML, "Заменить это", "Заменено")

вместо XML должно быть что-то другое. Не ссылка на файл, а текст скопированный из файла, попробую пошаманить немного. В любом случае спасибо за помощь.
 
Я свой код всегда проверяю.
Макрос корректно делает замену
Изменено: doober - 15.09.2020 15:28:15
 
Странно. Я текст макроса полностью скопировал из вашего сообщения, еще на всякий случай перепроверил глазами. Все как у вас. Но после выполнения макроса исходный файл становиться пустым  :(  
 
Запакуйте исходный xml файл в zip-архив и приложите к сообщению. Моё подозрение - нарушена структура исходного файла.
Изменено: sokol92 - 15.09.2020 18:45:27
Владимир
 
Цитата
sokol92 написал:
Запакуйте исходный xml файл в zip-архив и приложите к сообщению. Моё подозрение - нарушена структура исходного файла.
Там прикладывать в принципе и нечего, три строки всего
Код
Это не надо менять
Заменить это
Это тоже не надо менять
Все, больше ничего в xml файле нет. Я этот файл использовал просто для примера.

Но видимо вы правы насчет структуры, сейчас попробовал запустить макрос на рабочем xml файле, все работает.

Спасибо большое за помощь!
 
На будущее: XML - строгий формат, файл из #8 файлом XML не является. Соответственно, макрос из #3 при загрузке отвергает этот файл (метод Load возвращает False).
Изменено: sokol92 - 16.09.2020 14:21:49
Владимир
Страницы: 1
Наверх