我正在用Excel编写VBA项目,并尝试将文本输出到txt文件。但是,我在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
答案 0 :(得分:3)
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脚本运行时库没有理由不在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
进行操作时,只能在运行时解决成员调用(即“后期”绑定),这更容易出错,尤其是在您不熟悉所使用的库的情况下。
除非您打算在Mac上运行代码,否则无需与 Microsoft Scripting Runtime 库一起使用后期绑定。