gpt4 book ai didi

scripting - Visual Basic 脚本动态数组

转载 作者:行者123 更新时间:2023-12-02 07:34:54 25 4
gpt4 key购买 nike

所以我有一个 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) )。如果你想要一个动态数组,定义一个“普通”变量并为其分配一个空数组:

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但是,会将数组的所有元素复制到一个新数组中,因此在大规模时它不会表现得很好。如果性能是一个问题,你最好使用 System.Collections.ArrayList 类代替:
Dim vprglist : Set vprglist = CreateObject("System.Collections.ArrayList")
...
If vprogram.LastRunTime = "" Then
vprglist.Add vprogram.FullName
i = i + 1
End If

关于scripting - Visual Basic 脚本动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17663365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com