Объект fileOut.Write не поддерживает это свойство или метод - PullRequest
0 голосов
/ 08 мая 2019

Я пишу проект VBA в Excel и пытаюсь вывести текст в текстовый файл. Однако в файле fileOut.Write я обнаружил ошибку «объект не поддерживает это свойство или метод».

Хотелось бы узнать, правильный ли мой fileOut.Write?

Dim fso, fileOut As Object



'Begin writing backup script
Set fso = CreateObject("Scripting.FileSystemObject")
Set fileOut = fso.CreateTextFile(currentWorkbookPath & "\" & srrNumber & "_bkp.txt", True, False)


fileOut.Write = "#!/bin/sh -x" & vbCrLf & vbCrLf

1 Ответ

3 голосов
/ 08 мая 2019

FileSystemObject.CreateTextFile возвращает объект TextStream, который имеет метод Write (также есть метод WriteLine) ... но вы используя его как назначаемое свойство .

Просто удалите оператор присваивания =.

fileOut.Write "#!/bin/sh -x" & vbCrLf & vbCrLf

(примечание: без скобок)


Обратите внимание, что при этом fileOut объявляется как Object, а fso остается неявным Variant:

Dim fso, fileOut As Object

Вы хотите объявить явный тип для всех переменных:

Dim fso As Object, fileOut As Object

... и в идеале избегайте объявления нескольких переменных в одной инструкции:

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

Dim fileOut As Object
Set fileOut = fso.CreateTextFile(currentWorkbookPath & "\" & srrNumber & "_bkp.txt", True, False)

fileOut.Write content

Наконец, обратите внимание, что у библиотеки Microsoft Scripting Runtime нет никаких причин, чтобы не ссылаться в VBA. В меню «Инструменты» редактора выберите «Ссылки» и найдите библиотеку типов в списке. Затем работайте с актуальными типами:

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim fileOut As TextStream
Set fileOut = fso.CreateTextFile(currentWorkbookPath & "\" & srrNumber & "_bkp.txt", True, False)

fileOut.Write content

Обратите внимание, что когда используются фактические типы объектов, вы получаете список доступных членов при вводе оператора . (точка): это навсегда устраняет ошибку времени выполнения 438. Когда вы работаете с Object, вызовы участников могут быть разрешены только во время выполнения (то есть «поздняя» привязка), что более подвержено ошибкам, особенно если вы не знакомы с библиотекой, которую вы используете.

Нет необходимости использовать позднее связывание с библиотекой Microsoft Scripting Runtime , если только вы не собираетесь запускать свой код на Mac.

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