输出数组到MsgBox

时间:2014-07-24 16:15:14

标签: vbscript

我做PowerShell而不是VBScript,所以我有点失落。我试图在MsgBox中列出所有映射的驱动器(驱动器号和共享路径)。运行脚本时出现类型不匹配错误。如果我改变了#34; Dim myArray()"到" Dim myArray"我从变量中只得到一个项目。

Set objNetwork = WScript.CreateObject("WScript.Network")
Set colDrives = objNetwork.EnumNetworkDrives
Dim myArray()
For i = 0 to colDrives.Count-1 Step 2
 myArray = colDrives.Item(i) & vbTab & colDrives.Item (i + 1)
Next
MsgBox(myArray)

如何将数据保存到数组中,然后输出到MsgBox?

2 个答案:

答案 0 :(得分:4)

您的代码无效的原因是您创建的固定大小数组没有实际大小(Dim myArray()),然后尝试为该数组赋值。在VBScript中,您必须将值分配给数组位置(myArray(pos) = val),并且您不能附加到内置数组(至少没有一些额外的工作)。

您的案例中最直接的方法是建议的方法@Bond。但是,如果需要,可以使用数组执行此操作。你只需要一个可调整大小的数组:

ReDim myArray(-1)  'empty array
For i = 0 to colDrives.Count-1 Step 2
  ReDim Preserve myArray(UBound(myArray)+1)
  myArray(UBound(myArray)) = colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next

MsgBox Join(myArray, vbNewLine)

或(使用ArrayList),如下所示:

Set myArray = CreateObject("System.Collections.ArrayList")
For i = 0 to colDrives.Count-1 Step 2
  myArray.Add colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next

MsgBox Join(myArray.ToArray, vbNewLine)

由于在进入循环之前已经可以确定数组的大小,您也可以立即使用适当的大小来确定数组的大小,以避免重复的重新定义(这对于VBScript内置数组来说往往表现不佳):

ReDim myArray(colDrives.Count \ 2 - 1)
For i = 0 to colDrives.Count-1 Step 2
  myArray(i\2) = colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next

MsgBox Join(myArray, vbNewLine)

另一种选择是使用Dictionary

Set myArray = CreateObject("Scripting.Dictionary")
For i = 0 to colDrives.Count-1 Step 2
  myArray(colDrives.Item(i)) = colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next

MsgBox Join(myArray.Items, vbNewLine)

答案 1 :(得分:3)

您可以使用字符串并继续追加(&)。

Dim s
For i = 0 To colDrives.Count-1 Step 2
    s = s & colDrives.Item(i) & vbTab & colDrives.Item (i + 1) & vbCrLf
Next

MsgBox s