2013-07-15 3 views
1

그래서 나는 RAP (광고 프로그램 실행)을 통해 스윕하는 vb 스크립트가 있고 프로그램에 마지막 런타임이 없지만 프로그램의 전체 이름이 배열에 들어 있으면이 배열이 메세지 박스. 배열을 초기화하여 10 개의 값을 저장하지만 메시지 상자를 깨끗하게 유지하려면 모든 프로그램을 찾은 후 배열 크기를 ReDim으로 지정해야합니다 (shoudn't는 3 이상이되지만 클라이언트는 누가 알고 있습니다). 그러나 나는 크기를 배열을 얻을 수없는 것 그리고 그것을 발견 한 프로그램을 10 배열 슬롯 + 메시지 상자를 인쇄합니다.Visual Basic 스크립팅 동적 배열

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 

답변

6

고정 크기 배열 (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 
+0

더 목록 (10)보다 더 크게 안되며, 그 희귀 한 것,이 주셔서 감사합니다. – user2146211