0

デバイス関連の vbscript の問題があります。以下のコードは、後で実行することすら想定されていませんi = playercountが、実行されます。

Do Until i = playercount

    If i = playercount then
        Exit Do
    end if

    Select Case True
        Case i >=1 And i <= 4
            'usb hubs 1-4
            'b = i + 1
             If pluggedindev(4) = False Then

                   msgbox(i)
                   msgbox(playercount)
                   Set ExtHubPort(i) = ExtHub(1).Ports(i)
                   Wscript.Sleep 2000
                   ExtHubPort(i).HotPlug GenericHIDDSFDev(i)
                   WScript.Sleep 10000
                   pluggedindev(i) = True
                   MsgBox("usb device (ports 1-4)")
             'else if playercount <= 4 then
                   'Exit Do
             End If

        Case i >=5 And i <= 8
            'usb hubs 5-8
            Wscript.sleep 2000

            For b = 1 To 4
                 Set ExtHubPort(i) = ExtHub(2).Ports(b)
                 Wscript.sleep 2000
                 ExtHubPort(i).HotPlug GenericHIDDSFDev(i)
                 WScript.Sleep 10000
                 'Log("Usb devices 1 through 4 set")
            Next 

            'usb hubs 9-12
        Case i >=9 And i <= 12
            For b = 1 To 4 
            Set ExtHubPort(i) = ExtHub(3).Ports(b)
                Wscript.sleep 2000
                ExtHubPort(i).HotPlug GenericHIDDSFDev(i)
                WScript.Sleep 10000
            Next 
           'usb hubs 13-16
        Case i >=13 And i <= 16
            For b = 1 To 4 
                Set ExtHubPort(i) = ExtHub(4).Ports(b)
                Wscript.sleep 2000
                ExtHubPort(i).HotPlug GenericHIDDSFDev(i)
                WScript.Sleep 10000
            Next 
         'usb hubs 17-20
        Case i >=17 And i <=20
            For b = 1 To 4 
                Set ExtHubPort(i) = ExtHub(5).Ports(b)
                Wscript.sleep 2000
                ExtHubPort(i).HotPlug GenericHIDDSFDev(i)
                WScript.Sleep 10000
            Next 
    End Select

    i = i + 1

Loop

誰か見て、理由を見てください。i 添え字が範囲外になり、問題を引き起こしているようですが、明らかに上記のコードは機能するはずです。

4

2 に答える 2

1

私の推測では、playercount 0 (ゼロ) から開始し、i を 1 (1) に初期化します。条件が満たされることはなく、i = playercount元のループの 2 回目の反復に入ったときにエラーが表示されます。

手始めに、コードを次のように短くします。

' Let ExtHubPort(1 to playercount) reference to
'     ExtHub(1 to playercount/4).Ports(1 to 4)
For i = 0 to playercount - 1
    Set ExtHubPort(i+1) = ExtHub(int(i/4)+1).Ports((i mod 4) + 1)
    Wscript.sleep 2000
    ExtHubPort(i+1).HotPlug GenericHIDDSFDev(i+1)
    WScript.Sleep 10000
Next

これで、ループのどの部分で問題が発生しているかを簡単に確認できるようになりました。

于 2012-11-30T16:10:36.650 に答える
0

I または playercount の値に関するコメントが正しかったので、私はそれを理解しました。このコードをループの最後に配置して、プレーヤー数に達する前にカウンターを強制的に停止させることで解決しました (4 で停止しましたか?)。変数は、if ステートメントやその他のステートメントが正しく使用されていないため、上昇し続けます。助けてくれたすべての人に感謝します。

If i = playercount  then
Exit Do
elseif i < playercount then
i = i + 1
End If
于 2012-12-04T20:08:16.600 に答える