2012-01-31 7 views
2

Sub가 두 번 이상 호출 될 때 다시 사용할 수 있도록 배열 값을 저장하려고합니다. 값이 존재하면 배열에 값을 다시 할당하지 못하게하고 싶습니다.VBScript에서 전역 배열을 선언하는 방법

내 코드는 다음과 같습니다.

Dim views() 

Sub runit() 
    For i=0 To 3 
     test() 
    Next  
End Sub 

Sub test() 
     ReDim Preserve views(0)= "test" 

     ' - other codes that I want to run- 
End Sub 

"형식이 일치하지 않습니다 : 'choseviews'"오류가 발생합니다.

"Sub test"에서 "Dim views()"을 이동하면 오류가 발생하지 않습니다. VBScript에서 전역 배열을 선언하려면 어떻게해야합니까? 가능하지 않은 경우 Sub가 호출 될 때 배열을 다시 할당하는 것을 방지 할 수있는 방법이 있습니까?

다음 코드는 작동하지 않지만 내가 무엇을하려고하는지 알 수 있습니다.

Dim views() 

    Sub runit() 
     For i=0 To 3 
      test() 
     Next  
    End Sub 

    Function IsArrayDimmed(arr) 
     IsArrayDimmed = False 
     If IsArray(arr) Then 
     On Error Resume Next 
     Dim ub : ub = UBound(arr) 
     If (Err.Number = 0) And (ub >= 0) Then IsArrayDimmed = True 
     End If 
    End Function 


    Sub test() 
     If IsArrayDimmed(views) Then 

     Else 
      ReDim Preserve views(0)= "test" 

     End If 
       ' - other codes that I want to run- 
    End Sub 

감사합니다.

답변

5

올바르게 이해하면 전역 배열 변수를 선언 한 다음 해당 요소를 고정 된 수의 요소로 제한하지 않고 해당 배열에 추가하려는 것처럼 보입니다. 즉, 배열을 다시 할당하여 동적으로 배열의 크기를 늘려야합니다.

글로벌 선언은 정확하고 당신이 그것을 가지고 어디에 속하는 :

당신이 잘못된 구문, 당신은 같은 시간 :

ReDim Preserve views(0)= "test" 
에서 가치와 ReDim을 할당 할 수 없습니다 여기에 쓴
Dim views() 

또한, ReDim은 배열의 크기를 0으로 지정합니다. 이는 원하는 것과 반대입니다.

해당 배열 값은 배열의 꼬리에 값을 추가하기 전에 배열의 크기를 증가시키기 위해 ReDim을 처리하는이 같은 기능을 사용한다 "밀어"하고자하는 경우 :

Function Push(ByRef arrTarget, ByVal varValue) 
    Dim intCounter 
    Dim intElementCount 

    ReDim Preserve arrTarget(UBound(arrTarget) + 1) 

    If (isObject(varValue)) Then 
     Set arrTarget(UBound(arrTarget)) = varValue 
    Else 
     arrTarget(UBound(arrTarget)) = varValue 
    End If 

    Push = arrTarget 
End Function 
이처럼 사용

: 전역에서 인스턴스화

Call Push(views,"test") 
0

모든 변수는 "전역"변수가 될 것입니다. 그러나 원래 범위에서 변경 사항을 유지하려는 경우 "참조로"다른 범위에 해당 변수를 명시 적으로 전달해야합니다. 함수 또는 하위 선언에서 ByRef keword를 사용하여이를 수행 할 수 있습니다.

Sub test(ByRef viewsArray) 

이제 테스트 내에서 뷰에 대한 포인터 역할을하는 viewsArray를 참조하게됩니다.

관련 문제