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
'programing' 카테고리의 다른 글
사전에서 첫 번째 요소 가져오기 (0) | 2023.07.15 |
---|---|
스크롤할 때 배경 목록 보기가 검은색이 됨 (0) | 2023.07.15 |
효소로 반응 성분을 테스트하는 중입니다.유형 스크립트에서 인스턴스 메서드를 찾을 수 없습니다. (0) | 2023.07.15 |
Mongoose는 Mongodb의 findAndModify 메서드를 지원합니까? (0) | 2023.07.15 |
mongoose 모델이 new'ed일 때 ObjectId를 자동 생성하는 방법이 있습니까? (0) | 2023.07.15 |