Excel VBA의 전역 변수를 워크북에 표시하도록 선언하는 방법
글로벌 범위에 대한 질문이 있으며 문제를 간단한 예로 요약했습니다.
Excel 워크북에서:시트 1에는 두 개의 버튼이 있습니다.
첫 번째는 SetMe로 레이블이 지정되고 Sheet1의 모듈에 있는 서브루틴에 연결됩니다.
시트 1 코드:
Option Explicit
Sub setMe()
Global1 = "Hello"
End Sub
두 번째 항목은 ShowMe라는 레이블로 표시되며 ThisWorkbook 모듈의 서브루틴에 연결됩니다.
이 워크북 코드:
Option Explicit
Public Global1 As String
Debug.Print("Hello")
Sub showMe()
Debug.Print (Global1)
End Sub
SetMe를 클릭하면 컴파일러가 생성됩니다.error: variable not defined
.
별도의 모듈을 만들고 Global1 선언을 그 안으로 옮기면 모든 것이 작동합니다.
그래서 제 질문은: 제가 읽은 모든 것은 모듈의 맨 위에 선언된 글로벌 변수가 프로젝트의 모든 모듈에 표시되어야 한다는 것입니다.분명히 이것은 사실이 아닙니다.모듈에 대한 제 이해가 정확하지 않은 경우를 제외.
그 물건들은Sheet1
,Sheet2
,ThisWorkbook
워크북과 함께 제공됩니다. 이 모듈들은 글로벌 범위에서 변수를 선언할 수 있습니까?
또는 모듈 유형의 별도 모듈에서 전역을 선언할 수 있는 유일한 위치입니다.
질문은 다음과 같습니다. 모듈은 글로벌 범위에서 변수를 선언할 수 없습니까?
답변: 예, "가능"합니다.
유일한 요점은 글로벌 변수에 대한 참조입니다.ThisWorkbook
또는 시트 모듈이 완전한 자격을 갖추어야 합니다(즉, 다음과 같이 함).ThisWorkbook.Global1
예) 표준 모듈에서 전역 변수에 대한 참조는 모호성의 경우에만 완전하게 검증되어야 합니다(예: 이름으로 변수를 정의하는 표준 모듈이 둘 이상인 경우).Global1
세 번째 모듈에서 사용해야 합니다.
예를 들어 다음 위치에 배치합니다.Sheet1
코드
Public glob_sh1 As String
Sub test_sh1()
Debug.Print (glob_mod)
Debug.Print (ThisWorkbook.glob_this)
Debug.Print (Sheet1.glob_sh1)
End Sub
에 배치합니다.ThisWorkbook
코드
Public glob_this As String
Sub test_this()
Debug.Print (glob_mod)
Debug.Print (ThisWorkbook.glob_this)
Debug.Print (Sheet1.glob_sh1)
End Sub
및 표준 모듈 코드에서
Public glob_mod As String
Sub test_mod()
glob_mod = "glob_mod"
ThisWorkbook.glob_this = "glob_this"
Sheet1.glob_sh1 = "glob_sh1"
Debug.Print (glob_mod)
Debug.Print (ThisWorkbook.glob_this)
Debug.Print (Sheet1.glob_sh1)
End Sub
세 개의 서브는 모두 정상적으로 작동합니다.
PS1: 이 답변은 기본적으로 여기서 제공되는 정보를 기반으로 합니다.이 책은 (위대한 칩 피어슨의) 읽을 가치가 있습니다.
PS2: 당신의 라인Debug.Print ("Hello")
컴파일 오류를 제공합니다.Invalid outside procedure
.
PS3: VB 편집기에서 Debug -> Compile VBroject를 사용하여 (부분적으로) 코드를 확인할 수 있습니다.모든 컴파일 오류가 팝업됩니다.
PS4: 모듈 또는 시트에 Excel-VBA 코드 입력도 선택하십시오.
PS5: 글로벌 변수를 선언하지 못할 수도 있습니다.Sheet1
다른 워크북의 코드로 사용합니다(http://msdn.microsoft.com/en-us/library/office/gg264241%28v=office.15%29.aspx#sectionSection0; 참조). 이 점을 테스트하지 않았기 때문에 이 문제는 아직 확인되지 않았습니다.하지만 당신은 당신의 예에서 그렇게 할 의도는 없습니다.
PS6: 글로벌 변수를 완전히 검증하지 않은 경우 모호성으로 이어지는 몇 가지 경우가 있습니다.당신은 그것들을 찾기 위해 조금 만지작거릴지도 모릅니다.컴파일 오류입니다.
다음을 수행하여 개념을 학습/테스트할 수 있습니다.
새 Excel 워크북을 열고 Excel VBA 편집기에서 모듈->삽입->모듈을 마우스 오른쪽 버튼으로 클릭합니다.
합니다; " 모듈1"은 다음과 같습니다.
Public Global1 As String
워크시트 VBA 모듈 시트 1(시트 1)에 코드 스니펫을 넣습니다.
Sub setMe() Global1 = "Hello" End Sub
- 워크시트 VBA 모듈 시트 2(시트 2)에 코드 스니펫을 넣습니다.
Sub showMe() Debug.Print (Global1) End Sub
- Sub 하위로실행서
setMe()
에 Sub 그에음 Sub.showMe()
의 합니다.Global1
이것이 도움이 되기를 바랍니다.
언급URL : https://stackoverflow.com/questions/27576457/how-to-declare-global-variables-in-excel-vba-to-be-visible-across-the-workbook
'programing' 카테고리의 다른 글
문자열의 악센트를 제거하려면 어떻게 해야 합니까? (0) | 2023.06.26 |
---|---|
C# MongoDB: 도메인 개체를 올바르게 매핑하는 방법은 무엇입니까? (0) | 2023.06.26 |
Java 레코드를 @Service / @RestController 주석과 함께 사용해도 됩니까? (0) | 2023.06.26 |
헤로쿠를 위한 레일즈, 몽고이드 및 유니콘 구성. (0) | 2023.06.26 |
Angular 2 불투명 토큰 대 Angular 4 주입상품권 (0) | 2023.06.26 |