programing

excel vba의 공개 정적 변수

closeapi 2023. 7. 15. 10:08
반응형

excel vba의 공개 정적 변수

정적 변수를 한 절차에서 선언하고 이 변수를 Excel VBA를 사용하여 여러 다른 절차에서 사용할 수 있습니까?

예.

Public myvar as integer

Sub SetVar()
   static myvar as integer
   myvar=999
end sub

sub Usevar()
    dim newvar as integer
    newvar=myvar*0.5
end sub

저는 제 var를 다른 절차에서 볼 수 있어야 하며, 변경하거나 "잃어버린" 것이 아닙니다.위의 코드는 myvar가 정적 변수로 선언되지 않고 더 많은 코드가 변수 "lost"인 경우 작동합니다.정적 선언이 사용되는 경우 myvar는 usevar 프로시저에 표시되지 않습니다.또한 "Public Static myvar as integer"는 VBA에서 허용되지 않습니다.

도와주셔서 고마워요.

제우스

MAIN():

Public myvar As Integer

Sub MAIN()
    Call SetVar
    Call UseVar
End Sub

Sub SetVar()
    myvar = 999
End Sub

Sub UseVar()
    Dim newvar As Variant
    newvar = myvar * 0.5
    MsgBox newvar
End Sub

항목을 정적으로 선언하면 해당 값은 프로시저 또는 하위 항목 내에서 보존됩니다.
항목을 공용으로 선언하면 해당 값이 보존되고 다른 절차에서도 볼 수 있습니다.

이 질문은 4년 전 @Gary's Student에 의해 답변되었지만, 솔루션은 데이터 유형에 따라 달라질 수 있기 때문에 언급할 가치가 있는 미묘한 뉘앙스가 있습니다.myvar.

먼저, 질문에서 지적하신 것처럼Public Static myvar as Integer작동하지 않습니다, 왜냐하면Static하위 또는 함수 내부에서만 사용할 수 있습니다.

@Patrick Lebelletier의 OP에 대한 논평에서 언급했듯이, 당신은 다음과 같이 선언함으로써 이 문제를 쉽게 피할 수 있습니다.Constant대신(동적으로 변경할 필요가 없는 경우): Public Const myvar as Integer = 999(또는 가능성 있음)Private Const myvar...)

다른 옵션은 다음을 선언하는 것입니다.myvar변수나 상수 대신 함수로서, 효과적으로 유사 변수로 변환:

Private Function myvar() as Integer
     Static intMyvar as Integer 
     intMyvar = 999
     myvar = intMyvar
End function

다음과 같은 간단한 예에서는myvar는 정수이며, 의사-벡터 접근 방식은 분명히 불필요하며 함수 호출의 오버헤드를 추가합니다.단순히 다음을 선언합니다.Constant그 일을 합니다.그러나 상수를 사용하면 값이 개체가 아닌 정적인 경우에만 작동합니다.다음과 같은 경우에는 작동하지 않습니다.myvar예를 들어, 는 객체입니다.Range이 경우 유사 상수를 사용하는 것이 유용할 수 있습니다.

Private Function myvar() as Range
    Set myvar = Range("A1")
End Function

또 다른 장점은 함수 내부의 코드를 사용하여 특정 조건을 확인하고 다른 값을 할당할 수 있다는 것입니다.myvar따라서.

유사 상수 접근법을 워크시트 범위 이름 지정과 결합할 수도 있습니다.만약 셀 A1이 명명된 범위라면,MyRange그러면 다음과 같이 쓸 수 있습니다.

Dim strMyString as String
strMyString = "MyRange"
Private Function myvar() as Range
    Set myvar = Range(strMyString)
End Function

이제 셀을 잘라내어 붙여넣으면 명명된 범위가 따라오기 때문에 코드를 깨지 않고 셀 A1의 내용을 이동할 수 있습니다.저는 이 접근법이 워크시트에서 물건들이 많이 이동하는 경향이 있는 설계 단계에서 유용하다고 생각합니다.

유사 상수는 또한 대규모 프로젝트에서 문제가 될 수 있는 일반적인 전역(또는 모듈 수준) 변수와 관련된 일부 문제를 방지하는 데 도움이 됩니다.

핵심은 변수 2개를 사용하는 것입니다.아래 코드에서 myvar는 public이지만 static이 아닙니다. stvar는 static이지만 public이 아닙니다.이 범위는 기본() 범위 내에만 있습니다.myvar=stvar 및 stvar=myvar를 할당하여 공용 및 정적 변수를 효과적으로 생성합니다.값이 보존됩니다.

Public myvar As String
Sub Main() 'in module 1
Static stvar As String
myvar = stvar
toInput
stvar = myvar
End Sub

Sub toInput() 'in module2
myvar = InputBox("enter something", "Input", myvar)
End Sub

언급URL : https://stackoverflow.com/questions/21806425/public-static-variable-in-excel-vba

반응형