1

以下のコードがあります。静的な strInputPath3 を使用すると、コードは正常に動作しますが、strInputPath3 を使用すると、無効なプロシージャ コールまたは引数でコードがエラーになります。

strInputPath1 =  "C:\test" & "\" & "css" & "\" & "main.css"

strInputPath3 = "C:\test\css\main.css"


Set txsInput1 = FSO.OpenTextFile(strInputPath1, 1)
4

2 に答える 2

6

VBScript が文字列として使用できるものを .OpenTextFile に渡すと、メソッドはファイルを開こうとし、おそらく「ファイルが見つかりません」というエラーをスローします。

>> strInputPath1 =  "C:\test" & "\" & "css" & "\" & "main.css"
>> WScript.Echo strInputPath1
>> set f = goFS.OpenTextFile(strInputPath1,1)
>>
C:\test\css\main.css
Error Number:       76
Error Description:  Path not found

「無効なプロシージャ コール」エラーを取得するには、空の値など、不吉なものを渡す必要があります。

>> strInputPath1 = Empty
>> set f = goFS.OpenTextFile(strInputPath1,1)
>>
Error Number:       5
Error Description:  Invalid procedure call or argument

これらの事実は、あなたが

  • 初期化と .OpenTextFile() での使用の間に、変数 strInputPath1 の内容を変更しました。
  • または、変数 X を初期化し、変数 Y を使用しました (Y & X は「strInputPath1」のバリエーションである可能性があります)。
  • または、異なるスコープ (~Functions/Subs) で同じ名前の 2 つの変数を初期化して使用しました

「Option Explicit」でスクリプトを開始すると、このような失敗のリスクが軽減されます。

wrt「間違った名前の fso を取得しました」コメントを追加しました:

VBScript のエラー メッセージは解釈/理解が難しいことが多いため、これは、「何が問題なのか? VBScript は問題について何を教えてくれるのか? エラーを修正するにはどうすればよいのか? どうすれば回避できるのか?」について熟考する良い機会になるかもしれません。将来?"

goFS で文字列の最初のパラメーターとタイプミス (=> 空の変数) が与えられた場合:

>> strInputPath1 =  "C:\test" & "\" & "css" & "\" & "main.css"
>> set f = goSF.OpenTextFile(strInputPath1,1)
>>
Error Number:       424
Error Description:  Object required

理にかなっている: ドットの左側にオブジェクトを指定せずにメソッド (. 演算子) を呼び出そうとすることはできません。

邪悪な goSF をオブジェクトに設定しましょう:

>> Set goSF = New RegExp
>> set f = goSF.OpenTextFile(strInputPath1,1)
>>
Error Number:       438
Error Description:  Object doesn't support this property or method

「無効なプロシージャ呼び出しまたは引数」エラーはまだありません。goSF は現在 RegExp であるため、特定のメソッド (名前) - OpenTextFile() - を無視して、呼び出しを台無しにするとどうなるかを見てみましょう。

>> WScript.Echo TypeName(goSF)
>> Set ms = goSF.Execute()
>>
IRegExp2
Error Number:       450
Error Description:  Wrong number of arguments or invalid property assignment
>> Set ms = goSF.Execute(Null)
>>
Error Number:       13
Error Description:  Type mismatch

したがって、私の主張は依然として有効です。エラー「無効なプロシージャ コールまたは引数」は、有効な FSO で呼び出されたメソッド .OpenTextFile() に Empty を渡すことによって発生しました。

于 2013-06-13T17:46:04.147 に答える
1

これは昔からの質問ですが、今日は気になりました: ASCII だと思っていたのに実際には Unicode だったファイルを開こうとすると、無効なプロシージャ コールが OpenTextFile() によって引き起こされることもあります。

https://msdn.microsoft.com/en-us/library/314cz14s(v=vs.84).aspxを参照してください。

そう

Set txsInput1 = FSO.OpenTextFile(strInputPath1, 1)

になるだろう

Set txsInput1 = FSO.OpenTextFile(strInputPath1, 1, false, -1)
于 2016-09-30T14:01:00.940 に答える