모든 프로그래밍 언어에는 정의 된 변수에 액세스 할 수있는 위치를 정의하는 변수 액세스 지정자가 있습니다. Excel VBA도 예외는 아닙니다. VBA에도 범위 지정자가 있습니다. 이러한 범위 지정자는 Excel VBA에서 변수의 가시성 / 범위를 설정하는 데 사용할 수 있습니다.

Excel VBA에는 세 가지 유형의 범위 지정자가 있습니다.

  1. 절차 수준. 개인 모듈 수준. Public-Project Level === VBA 프로 시저 레벨 변수 범위 서브 루틴 내에서 선언 된 변수는 해당 프로 시저 / 함수에서만 액세스 할 수 있습니다. 절차 수준 범위가 있습니다. 일반적으로 Dim 키워드로 선언됩니다. 모듈이 암시 적 옵션이면 변수가 선언되지 않았을 수 있으며 직접 사용됩니다.

아래 예에는 변수 x와 y가있는 서브 루틴 범위 테스트가 있습니다. 첫 번째 서브 루틴을 실행하면 완벽하게 실행되고 X와 Y의 합을 출력합니다

Option Explicit

Sub scopeTest()

Dim x, y As Integer ' Procedure level variable in VBA

x = 2

y = 3

Debug.Print x + y

End Sub

Sub sum()

x = 5

y = 7

Debug.Print x + y

End Sub

그러나 서브 루틴 합계를 실행하면 변수가 선언되지 않았다는 오류가 발생합니다. 왜? X와 Y는 프로 시저 scopeTest에 대해 비공개이기 때문에 서브 루틴 합계는 이에 액세스 할 수 없습니다.

따라서 서브는 오류가 발생합니다.

image

VBA 전용 변수-모듈 수준 범위 전체 모듈에서 액세스해야하는 변수를 선언하려는 경우 해당 변수를 모든 서브 루틴 또는 함수 앞에 모듈 상단에 전용으로 선언합니다.

모듈에서 서브 루틴 앞에 선언 된 변수는 기본적으로 Private입니다. Dim 키워드로 선언하더라도. 그러나 구체적으로 Private 키워드를 사용하는 것이 좋습니다.

아래 두 절차는 동일한 모듈, 모듈 1에 있습니다.

Option Explicit

'Module level variable in VBA. Both variables x and y are private to this module. and

'can be accessed from any sub or function within this module.

Dim x As Integer

Private y As Integer

Sub scopeTest() 'This can be accessed from any module in the project

x = 2

y = 3

Debug.Print x + y

End Sub

Private Sub sum() ' This can't be accessed from other modules

x = 5

y = 7

Debug.Print x + y

End Sub

위의 두 함수는 변수 x와 y가이 모듈의 개인 변수이므로 완벽하게 잘 실행됩니다.

_ 중요 : x 및 y에 저장된 마지막 값은 전체 모듈에서까지 유지됩니다. sub scopeTest를 먼저 실행하고 sub sum에서 x와 y의 값을 초기화하지 않고 실행하면 x와 y의 초기 값은 변경되지 않습니다 ._

아래 서브 루틴은 별도의 모듈 인 모듈 2에 정의되어 있습니다. 다른 모듈에서 변수에 액세스하려고하면 VBA 프로 시저 (또는 함수)에 오류가 발생합니다.

image

그러나 모듈 2의 모듈 1에서 서브 루틴 합계를 호출하려고하면 완벽하게 작동합니다. 함수 및 서브 루틴을 모듈 전용으로 만들려면 sub 및 함수 앞에 키워드 Private을 사용하십시오.

_ 참고 :-모듈에서 서브 루틴 또는 함수 앞에 선언 된 변수는 기본적으로 모듈 전용입니다. Privatekeyword를 사용할 수 있습니다. 그러나 함수와 서브 루틴은 기본적으로 공용이며 프로젝트의 모든 모듈에서 액세스 할 수 있습니다. 함수와 서브 루틴을 모듈에 비공개로 만들려면 Private 키워드를 사용해야합니다. 그러나 변수는 아닙니다. Excel VBA의 모든 모듈에서 변수에 액세스 할 수 있도록하려면 Public 키워드를 사용합니다. * 프로젝트에서 공용 변수를 선언하려면 public 키워드가있는 함수 또는 서브 루틴 앞에 모듈 상단에 변수를 선언했습니다. 아래 코드는 모듈 1에 작성되었습니다.

Option Explicit

'Project level variable in VBA.

Public x As Integer

Public y As Integer

Public Sub scopeTest() 'This can be accessed from any module in the project

x = 2

y = 3



End Sub

Private Sub sum() ' This can't be accessed from other modules

x = 5

y = 7

Debug.Print x + y

End Sub

그리고이 서브 루틴은 다른 모듈 인 모듈 2에 있습니다.

Option Explicit

Sub mul()

Call scopeTest

'Call sum         ' it won't work as it is private to the module 1

Debug.Print x * y

End Sub

이번에는 완벽하게 실행됩니다.

먼저 서브 루틴 scopeTest를 호출했습니다. scopeTest는 공용이므로 호출됩니다. x와 y의 값을 초기화합니다. 다음으로 x와 y를 곱합니다. scopeTest 서브 루틴이 값 2와 3으로 초기화 했으므로 결과는 6입니다.

예, 이것은 Excel에서 변수 범위 지정자를 사용하여 Excel VBA 프로젝트에서 변수, 함수 및 서브 루틴의 가시성을 제어하는 ​​방법입니다.

내가 할 수있는 가장 간단한 방법으로 VBA의 액세스 지정자를 설명하려고했습니다. 설명이 되었기를 바랍니다. 이 기사 또는 기타 VBA 관련 의문에 대해 의문이 있으시면 아래 의견 섹션에서 저에게 물어보십시오. 나는 당신에게서 여기에 기뻐할 것입니다.

관련 기사 :

link : / cells-ranges-rows-and-columns-in-vba-what-is-the-difference-byref-and-byval-arguments-vba-interview-question [ByRef 및 ByVal Arguments]| When 인수가 ByRef 인수로 다른 하위 또는 함수에 전달되면 실제 변수의 참조가 전송됩니다. 변수 복사본에 대한 변경 사항은 원래 인수에 반영됩니다.

link : / files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [Microsoft Excel에서 VBA를 사용하여 확인 메시지없이 시트 삭제]| 이후 VBA를 사용하여 시트를 삭제하는 경우 수행중인 작업을 알고 있습니다. 이 경고를 표시하지 않고 망할 시트를 삭제하도록 Excel에 지시하고 싶습니다.

link : / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel 2016에서 VBA를 사용하여 새 통합 문서 추가 및 저장]| 이 코드에서는 먼저 통합 문서 개체에 대한 참조를 만들었습니다. 그런 다음 새 통합 문서 개체로 초기화했습니다. 이 접근 방식의 이점은이 새 통합 문서에서 작업을 쉽게 수행 할 수 있다는 것입니다. 저장, 닫기, 삭제 등`link : / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel Excel의 상태 표시 줄을 코드 모니터로 사용할 수 있습니다. VBA 코드가 길고 VBA를 사용하여 여러 작업을 수행하는 경우 화면 업데이트를 비활성화하여 화면 깜박임`link : / general-topics-in-vba-turn-off-warning-messages- using-vba-in-microsoft-excel [Microsoft Excel 2016에서 VBA를 사용하여 경고 메시지 끄기]|이 코드는 VBA 경고를 비활성화 할뿐만 아니라 코드의 시간 효율성을 높입니다. 방법을 봅시다.

인기 기사 :

link : / keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [50 개의 Excel 단축키로 생산성 향상]| 작업 속도를 높이십시오. 이 50 개의 바로 가기를 사용하면 Excel에서 더 빠르게 작업 할 수 있습니다.

link : / formulas-and-functions-introduction-of-vlookup-function [Excel의 VLOOKUP 함수]| 이것은 다른 범위와 시트에서 값을 조회하는 데 사용되는 Excel의 가장 많이 사용되고 인기있는 기능 중 하나입니다. link : / tips-countif-in-microsoft-excel [Excel 2016의 COUNTIF]| 이 놀라운 기능을 사용하여 조건으로 값을 계산합니다. 특정 값을 계산하기 위해 데이터를 필터링 할 필요가 없습니다.

Countif 기능은 대시 보드를 준비하는 데 필수적입니다.

link : / excel-formula-and-function-excel-sumif-function [Excel에서 SUMIF 함수 사용 방법]| 이것은 또 다른 대시 보드 필수 기능입니다. 이를 통해 특정 조건에 대한 값을 합산 할 수 있습니다.