Scripting Visual Basic脚本动态数组

Scripting Visual Basic脚本动态数组,scripting,vbscript,Scripting,Vbscript,因此,我有一个vb脚本,它可以扫描RAP(运行广告程序),如果程序没有最后一次运行时间,但该程序的全名被放入一个数组中,那么这个数组会回显到一个消息框中。我初始化数组以存储10个值,但是为了保持消息框干净,我想在找到所有程序后重新分配数组大小(不应超过3个,但谁知道客户端的大小)。但是,我似乎无法调整数组的大小,它会打印一个消息框,其中包含10个数组插槽以及找到的程序 Dim vprglist(10) Dim i Dim strBuf Dim intIndex Set vprogram

因此,我有一个vb脚本,它可以扫描RAP(运行广告程序),如果程序没有最后一次运行时间,但该程序的全名被放入一个数组中,那么这个数组会回显到一个消息框中。我初始化数组以存储10个值,但是为了保持消息框干净,我想在找到所有程序后重新分配数组大小(不应超过3个,但谁知道客户端的大小)。但是,我似乎无法调整数组的大小,它会打印一个消息框,其中包含10个数组插槽以及找到的程序

Dim vprglist(10)
Dim i  
Dim strBuf 
Dim intIndex 

Set vprograms = oUIResource.GetAvailableApplications

i = 0 
For Each vprogram In vprograms
     If vprogram.LastRunTime = "" Then
         vprglist(i) = vprogram.FullName
         i = i + 1
     End If   
Next

ReDim Preserve vprglist(i)

If vprglist <> Null Then  

    For intIndex = LBound(vprglist) To UBound(vprglist)
        strBuf = strBuf & "   -  " & vprglist(intIndex) & vbLf 
    Next
        vmsgbox = MsgBox("Do you want to Install(Yes) or Defer(No) the follow software: " & vbLf & strBuf,64+4)
        Select Case vmsgbox
Dim vprglist(10)
昏暗的我
暗淡strBuf
Dim intIndex
设置vprograms=oUIResource.GetAvailableApplications
i=0
对于vprograms中的每个vprogram
如果vprogram.LastRunTime=“”,则
vprglist(i)=vprogram.FullName
i=i+1
如果结束
下一个
ReDim保留vprglist(i)
如果vprglist为空,则
对于intIndex=LBound(vprglist)到UBound(vprglist)
strBuf=strBuf&“-”&vprglist(intIndex)&vbLf
下一个
vmsgbox=MsgBox(“是否要安装(是)或延迟(否)以下软件:”&vbLf&strBuf,64+4)
选择案例vmsgbox

您不能对固定大小的数组重新进行尺寸标注(
Dim vprglist(10)
)。如果需要动态数组,请定义一个“普通”变量并为其分配一个空数组:

Dim vprglist : vprglist = Array()
或者直接用
ReDim
定义它:

ReDim vprglist(-1)
然后可以按如下方式重新对阵列进行尺寸标注:

If vprogram.LastRunTime = "" Then
  ReDim Preserve vprglist(UBound(vprglist)+1)
  vprglist(UBound(vprglist)) = vprogram.FullName
  i = i + 1
End If
ReDim Preserve
会将数组的所有元素复制到一个新数组中,因此它在大规模应用中的性能不会太好。如果性能是一个问题,您最好使用该类:

Dim vprglist : Set vprglist = CreateObject("System.Collections.ArrayList")
...
If vprogram.LastRunTime = "" Then
  vprglist.Add vprogram.FullName
  i = i + 1
End If

不,这个列表不应该超过10,这是很少见的,谢谢你。