我已多次搜索此错误代码并已访问多个站点以阅读响应.长话短说,还没有找到解决方案.
引用的一个页面:发送时出错(在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
发生了什么:我正在扫描文本字符串的.txt文件(Entries1.txt).如果它们出现,我需要设置相应的indi值(所以当indi稍后用作变量时它将使用正确的#)并更改tran1变量.
出于某种原因,我收到错误:
set objFile = objFSO.OpenTextFile
错误是
无效的过程调用或参数代码:800A0005
非常感谢帮助.
虽然肯的解决方案是正确的,但它没有正确解释你得到的错误的原因,所以我添加了一个补充答案.
该错误是由该标识符所引起ForReading
的线
set objFile = objFSO.OpenTextFile("C:\Users\Adrian\Desktop\Entries1.txt", ForReading)
该OpenTextFile
方法接受可选的第二个参数iomode
,该参数的值可以是1
,2
或8
.但是,与文档建议的相反,这些数值没有预定义的常量.除非你自己定义它们(你没有定义它们),例如:
Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8
您必须使用数值或完全省略参数(在这种情况下,它默认为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
您可以使用Option Explicit
(强烈建议用于生产代码)来避免此类问题.当代码中存在未定义的变量时,它会引发运行时错误,从而可以在早期检测到类似的问题.