I have searched this error code numerous times and have gone to numerous sites to read responses. Long story short, still haven't found a solution.
One page referenced: Error while sending ( character with sendkeys in vbscript
Here is my code:
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
What's going on: I am scanning a .txt file (Entries1.txt) for text strings. If they occur I need to set corresponding indi values (so when indi is used later as a variable it will use the correct #) and change the tran1 variables as well.
For some reason I'm getting an error at:
set objFile = objFSO.OpenTextFile
The error is
Invalid procedure call or argument Code: 800A0005
Help would be greatly appreciated.
While Ken's solution is correct, it doesn't properly explain the reason for the error you're getting, so I'm adding a supplementary answer.
The error is caused by the identifier ForReading
in the line
set objFile = objFSO.OpenTextFile("C:\Users\Adrian\Desktop\Entries1.txt", ForReading)
The OpenTextFile
method accepts an optional second parameter iomode
that can have a value of either 1
, 2
or 8
. However, contrary to what the documentation suggests, there are no pre-defined constants for these numeric values. Unless you define them yourself (which you didn't), e.g. like this:
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
you must use the numeric values or omit the parameter entirely (in which case it defaults to 1
).
If you use an undefined identifier like ForReading
the interpreter will automatically initialize it with the value Empty
, which could produce unexpected behavior as it did in your case.
Demonstration:
>>> 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
You can avoid this kind of issue by using Option Explicit
(which is highly recommended for production code). It will raise a run-time error when there are undefined variables in your code, allowing you to detect problems like this early on.
Removing the ForReading
portion of the line allows it to execute on my system using the following code:
'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
I tested using a simple Test.txt
containing the following:
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
I tested it using the following at a command prompt:
D:\TempFiles>cscript TypeFile.vbs
I received this output:
Note: An additional problem you'll encounter is using set
on this line (and perhaps the one that follows it):
set indi = 2
indi
is a simple variable, not an object, and therefore there's no need for set
. Just assign the value directly:
indi = 2
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With