使用set objFile = objFSO.OpenTextFile时代码800A0005

Adr*_*ian 4 vbscript

我已多次搜索此错误代码并已访问多个站点以阅读响应.长话短说,还没有找到解决方案.

引用的一个页面:发送时出错(在vbscript中使用sendkeys的字符

这是我的代码:

set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("C:\Downloads\software\putty.exe -load navstat")

DIM date 
date = 301113

DIM tran1
tran1 = TAFFY

set objFSO = CreateObject("Scripting.FileSystemObject") 
set objFile = objFSO.OpenTextFile("C:\Users\Adrian\Desktop\Entries1.txt", ForReading) 

Do Until objFile.AtEndOfStream 
    strLine = objFile.ReadLine 
    If InStr(strLine, "JFK.GREKI3.MARTN..TOPPS") Then 
        set indi = 2 
        set tran1 = TOPPS 
    End If
Loop
Run Code Online (Sandbox Code Playgroud)

发生了什么:我正在扫描文本字符串的.txt文件(Entries1.txt).如果它们出现,我需要设置相应的indi值(所以当indi稍后用作变量时它将使用正确的#)并更改tran1变量.

出于某种原因,我收到错误:

set objFile = objFSO.OpenTextFile
Run Code Online (Sandbox Code Playgroud)

错误是

无效的过程调用或参数代码:800A0005

非常感谢帮助.

Ans*_*ers 10

虽然肯的​​解决方案是正确的,但它没有正确解释你得到的错误的原因,所以我添加了一个补充答案.

该错误是由该标识符所引起ForReading的线

set objFile = objFSO.OpenTextFile("C:\Users\Adrian\Desktop\Entries1.txt", ForReading)
Run Code Online (Sandbox Code Playgroud)

OpenTextFile方法接受可选的第二个参数iomode,该参数的值可以是1,28.但是,与文档建议的相反,这些数值没有预定义的常量.除非你自己定义它们(你没有定义它们),例如:

Const ForReading   = 1
Const ForWriting   = 2
Const ForAppending = 8
Run Code Online (Sandbox Code Playgroud)

必须使用数值或完全省略参数(在这种情况下,它默认为1).

如果使用未定义的标识符,ForReading则解释器将使用值自动初始化它Empty,这可能会产生意外行为,就像在您的情况下一样.

示范:

>>> WScript.Echo TypeName(ForReading)
Empty
>>> Set f = fso.OpenTextFile("C:\Temp\some.txt", ForReading)
Invalid procedure call or argument (0x5)
>>> WScript.Echo TypeName(f)
Empty
>>> Set f = fso.OpenTextFile("C:\Temp\some.txt", Empty)
Invalid procedure call or argument (0x5)
>>> WScript.Echo TypeName(f)
Empty
>>> 'parameter omitted
>>> Set f = fso.OpenTextFile("C:\Temp\some.txt")
>>> WScript.Echo TypeName(f)
TextStream
>>> Set f = Nothing
>>> 'numeric parameter
>>> Set f = fso.OpenTextFile("C:\Temp\some.txt", 1)
>>> WScript.Echo TypeName(f)
TextStream
>>> Set f = Nothing
>>> 'define identifier before using it as parameter
>>> ForReading = 1
>>> WScript.Echo TypeName(ForReading)
Integer
>>> Set f = fso.OpenTextFile("C:\Temp\some.txt", ForReading)
>>> WScript.Echo TypeName(f)
TextStream
Run Code Online (Sandbox Code Playgroud)

您可以使用Option Explicit(强烈建议用于生产代码)来避免此类问题.当代码中存在未定义的变量时,它会引发运行时错误,从而可以在早期检测到类似的问题.


Ken*_*ite 2

删除ForReading该行的部分允许它使用以下代码在我的系统上执行:

'Saved in D:\TempFiles\TypeFile.vbs
set objFSO = CreateObject("Scripting.FileSystemObject") 
set objFile = objFSO.OpenTextFile("C:\Users\Ken\Desktop\Test.txt") 

Do Until objFile.AtEndOfStream 
    strLine = objFile.ReadLine 
    wscript.echo strLine
Loop
Run Code Online (Sandbox Code Playgroud)

Test.txt我使用包含以下内容的简单测试:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Run Code Online (Sandbox Code Playgroud)

我在命令提示符下使用以下命令对其进行了测试:

D:\TempFiles>cscript TypeFile.vbs
Run Code Online (Sandbox Code Playgroud)

我收到了这个输出:

在此输入图像描述

注意:您将遇到的另一个问题是set在这一行(也许是其后的那一行)上使用:

set indi = 2
Run Code Online (Sandbox Code Playgroud)

indi是一个简单变量,而不是对象,因此不需要set. 直接赋值即可:

indi = 2
Run Code Online (Sandbox Code Playgroud)