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.