0

なぜそれが起こっているのか混乱しているので、誰かが以下のコードをデバッグするのを手伝ってくれることを願っています.

ユーザーがサーバー/PC にログオンしたときに実行されるかなり単純な VBScript があり、Active Directory の詳細に基づいていくつかの署名を作成します。新しい署名を作成するときに物事を少し簡単にするために、署名作成の各セクションを関数に移動することにしました。

私が問題を抱えている機能は次のとおりです。

'Function to add job title and company
Function AddTitle
    objSelection.Font.Name = "Calibri"
    objSelection.Font.Bold = False
    objSelection.Font.Italic = False
    objSelection.Font.Size = "11"
    objSelection.Font.Color = RGB(0,0,0)
    If(strTitle) Then
        objSelection.TypeText strTitle & Chr(11)
    End If
    objSelection.TypeText strCompany & Chr (11)
End Function

さて、後で使用して関数を呼び出すとき:

'Add job title and company
AddTitle

If ステートメント内のセクションは無視されます。一部の変数は、関数内で機能するようにグローバルに定義する必要があることを知っています。strTitle は、スクリプトの先頭で確実に定義されています。

if ステートメントから取り出された場合、if ステートメント内のセクションが正しく機能するため、完全に明らかな何かが欠けていますか。同様に、if ステートメントをスクリプト インラインに追加して関数から取り出すと、正しく動作します。

関数から実行する場合のみです。

4

1 に答える 1

2

どうやら、スクリプトのどこかにグローバルがあり、行が通常On Error Resume Next発生する「タイプの不一致」エラーを抑制しています。If(strTitle) Then

strTitleおそらく文字列値が含まれているため、条件でブール値のように使用することはできません。この行を次のように変更します。

If Trim(strTitle) <> "" Then

コードは期待どおりに動作するはずです。

于 2013-07-04T13:10:17.047 に答える