Excel VBA TextStream.writeline с китайскими иероглифами

Я новичок в VBA и не понимаю, как устранить ошибку «Ошибка времени выполнения« 5 »: недопустимый вызов процедуры или аргумент», которую я получаю при выполнении этого кода. Рассматриваемая ячейка имеет китайские символы, и код, кажется, отлично работает на английском алфавите. Поток выводится в текстовый файл. (в будущем должен быть файл xml, но у меня все еще не реализовано правильное форматирование)

Dim fso As New FileSystemObject, stream As TextStream    
Set stream = fso.createTextFile("C:\Users\username\XMLs\" _
   & WS_Src.Cells(c.Row, 5).Value & "_" & WS_Src.Cells(c.Row, 4).Value & "_Feature.xml", True)

...

stream.WriteLine "<title>" & vbCrLf & "<![CDATA[ " & WS_Src.Cells(c.Row, 6).Value & "]]>" & vbCrLf   & "</title>" 'error is on this line
stream.Close

Спасибо! Крис


person dragoncmd    schedule 27.07.2012    source источник


Ответы (1)


Синтаксис использования метода CreateTextFile похож на object.CreateTextFile(filename[, overwrite[, unicode]]) . Где:

  • filename: Требуется. Строковое выражение, определяющее файл для создания.
  • overwrite Дополнительно. Логическое значение, указывающее, можно ли перезаписать существующий файл. Значение равно True, если файл можно перезаписать; False, если его нельзя перезаписать. Если этот параметр опущен, существующие файлы не перезаписываются.
  • unicode Дополнительно. Логическое значение, указывающее, создан ли файл как файл Unicode или ASCII. Значение равно True, если файл создан как файл Unicode; False, если он создан как файл ASCII. Если этот параметр опущен, предполагается файл ASCII.

И вы пропустили здесь последний параметр, но входящий текст, будучи Chinese, это не просто ASCII. Скорее вы должны указать для этого значение True, я имею в виду для параметра unicode. Это точно решило бы проблему.

КСТАТИ! Есть еще некоторые факторы, которые я вижу в коде, которые могут вызвать другие ошибки во время выполнения.

  • Когда вы создаете имя файла путем объединения значений ячеек, убедитесь, что в строке пути нет недопустимых символов,
  • Кроме того, недостаточно только установить значение overwrite в true, но также убедитесь, что папка уже существует. В противном случае процедура снова будет поймана ошибками времени выполнения.

Надеюсь это поможет.

person Cylian    schedule 28.07.2012
comment
Это работает сейчас! только что добавил дополнительный параметр, спасибо. Я знаю о проблемах с именами файлов с ячейками, и мне нужно будет реализовать некоторые функции поиска и замены в начале макроса, чтобы иметь дело с символами, которые недопустимы в именах файлов dos, и изменить материал на форматирование xml. Что касается папки, то нет необходимости менять расположение папки, поэтому я указал путь к папке, созданной для этой цели. Спасибо еще раз! - person dragoncmd; 30.07.2012