2012-11-29 79 views
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 

任何人都看一看,看看爲什麼? 看來,我的下標超出範圍並導致問題,但顯然上面的代碼應該工作。

+0

'i'和'playercount'是什麼初始化的? – 2012-11-30 08:56:19

+0

playercount的測試值爲4,並繼續進入5而不是停止。也許計數器在到達4時不斷增加? – jeffery

回答

0

我想出了關於I或playercount價值的評論是正確的。我通過在循環結束時將此代碼解決,迫使計數器在到達playercount之前停止(它停在4?)。變量我只是繼續上去,因爲我的if和其他語句沒有正確使用。感謝所有幫助過的人。

If i = playercount then 
Exit Do 
elseif i < playercount then 
i = i + 1 
End If 
1

我的猜測是你的playercount爲0(零),並初始化爲1(one)。 i = playercount條件將永遠不會被滿足,當它進入原始循環的第二次迭代時,會出現錯誤。

對於首發,縮短你的代碼是這樣的:

' 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 

現在很容易看到它是怎麼了循環的哪一部分。

+0

我放了一個消息框來顯示我和玩家的數量。但是在i = playercount之後它繼續下去,不應該。 – jeffery

+0

ExtHub(hubnumber).Ports(集線器上的特定端口號) – jeffery

+0

我將嘗試代碼,但ExtHub可以從0開始,但端口必須是1到4的值,因爲我無法弄清楚如何使虛擬usb集線器支持更多端口。 – jeffery