【问题标题】:Output array to MsgBox输出数组到 MsgBox
【发布时间】:2014-09-16 07:37:12
【问题描述】:

我做的是 PowerShell 而不是 VBScript,所以我有点迷茫。我正在尝试在 MsgBox 中列出所有映射的驱动器(驱动器号和共享路径)。运行脚本时出现类型不匹配错误。如果我将“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?

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    您的代码不起作用的原因是因为您正在创建没有实际大小的固定大小数组 (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)
    

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-15
        • 2015-12-09
        • 1970-01-01
        • 1970-01-01
        • 2011-11-18
        相关资源
        最近更新 更多