programing

Excel VBA의 전역 변수를 워크북에 표시하도록 선언하는 방법

bestprogram 2023. 6. 26. 21:31

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: 글로벌 변수를 완전히 검증하지 않은 경우 모호성으로 이어지는 몇 가지 경우가 있습니다.당신은 그것들을 찾기 위해 조금 만지작거릴지도 모릅니다.컴파일 오류입니다.

다음을 수행하여 개념을 학습/테스트할 수 있습니다.

  1. 새 Excel 워크북을 열고 Excel VBA 편집기에서 모듈->삽입->모듈을 마우스 오른쪽 버튼으로 클릭합니다.

  2. 합니다; " 모듈1"은 다음과 같습니다.Public Global1 As String

  3. 워크시트 VBA 모듈 시트 1(시트 1)에 코드 스니펫을 넣습니다.

Sub setMe()
      Global1 = "Hello"
End Sub
  1. 워크시트 VBA 모듈 시트 2(시트 2)에 코드 스니펫을 넣습니다.
Sub showMe()
    Debug.Print (Global1)
End Sub
  1. 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