"이 워크시트"와 동등한 건가요?
Excel에는 워크시트 모듈의 일부인 매크로가 있습니다.
코드에서 참조된 범위가 해당 워크시트의 일부인지 확인하고자 합니다.
예를 들어, 나의Main Sheet
워크시트 모듈:
Sub test()
Dim rng as Range
Set rng = Range("A1")
End Sub
물론 워크시트에 범위를 명시적으로 부여하고자 합니다.보통은 제가.
Set rng = Worksheets("Main Sheet").Range("A1")
그런데 궁금한 게 있는데, 워크시트 모듈에 제 코드가 있는데 그 워크시트를 어떻게 참고하면 될까요?저는 이런 생각을 하고 있었습니다.ThisWorksheet
하지만 그것은 VBA에서는 방법이 아닙니다.ThisWorkbook
그것이 제가 그것을 시도해 볼 생각을 한 이유입니다.).
다른 유일한 생각은 매크로가 워크시트 모듈 내부에 있기 때문에 "unassigned" 범위 변수는 암시적으로 다음을 참조한다는 것입니다.Main Sheet
다른 워크시트의 셀을 참조할 수 없습니다.
제가 정확히 이해하고 있습니까, 아니면 실행 중인 코드가 저장된 워크시트를 참조할 수 있는 방법이 있습니까?
워크시트 모듈은 문서 모듈로, 클래스에서 멤버를 상속(예, 상속)하는 것을 제외하고는 다른 클래스와 동일합니다.Worksheet
인터페이스와 문서 모듈이 되는 것은 호스트 응용 프로그램의 객체 모델(즉, 문서 모듈)을 통해 인스턴스를 생성하는 유일한 방법입니다.ThisWorkbook.Worksheets.Add
는 기본적으로 공장 방식입니다.
클래스 모듈일 때 해당 모듈의 워크시트 개체는 예를 들어 다음과 같습니다.Sheet1
클래스는 당신이 그것에 넣었던 모든 멤버를 포함하고, 그리고 모든 멤버가 그것으로부터 물려받은.Worksheet
인터페이스...을 포함하여Range
소유물.
그래서 자격이 없는 사람이Range
워크시트 모듈의 호출은 단순히 VBA 언어의 범위 지정 규칙 때문에 해당 시트를 참조합니다. 코드는 다음과 같습니다.
foo = Range("B12").Value2
해당 범위에 지역 변수가 있는 경우
Range
Range
…을 말합니다.만약 그 모듈에 이름을 가진 멤버가 있다면,
Range
Range
…을 말합니다.현재 프로젝트에 글로벌 변수가 있는 경우
Range
Range
…을 말합니다.참조된 프로젝트 또는 유형 라이브러리에 전역 범위 식별자가 있는 경우
Range
Range
…을 말합니다.
당신은 그것을 명확하게 할 수 있습니다.Range
자격을 부여하여 호출합니다.Me
키워드는 현재 객체에 대한 참조를 반환하며, 이 경우에는Sheet1
interface (아직도 당신이 코드 비하인드에 있다고 가정할 때)Sheet1
):
foo = Me.Range("B12").Value2
그 코드는 그에게 불리하게 작용할 것입니다.Sheet1
만약 당신이 비밀에 부쳐진다면Sheet1
, 반대로Sheet2
만약 당신이 비밀에 부쳐진다면Sheet2
, ...표준 모듈에서 컴파일이 실패합니다.
하지만 그 본질과 의미는Me
관심을 더 가질 만합니다.
'나'에 대하여
Me
는 프로시저의 범위에 있는 런타임에만 존재할 수 있는 것, 즉 현재 개체를 가리키는 예약된 이름(해당 이름의 변수를 가질 수 없음)입니다.후드 밑에, 멤버들에게 전화를 걸 때DoSomething
A에 대항해Class1
object, 호출은 기본적으로 다음과 같이 진행됩니다.
Set obj = New Class1
Class1.DoSomething obj
이 뜻은DoSomething
VBA에서는 다음과 같습니다.
Public Sub DoSomething()
End Sub
하지만 VBA는 이렇게 봅니다.
Public Sub DoSomething(ByVal Me As Class1)
End Sub
그래서.Me
암시적인 국소적 범위ByVal
유형의 매개변수Class1
, 그리고 안에서DoSomething
스코프는 호출자가 현재 사용 중인 모든 개체에 대한 참조를 보유합니다.
그것이 기본적으로 나의 이해 '나'의 핵심입니다. (꽃, 벌이 없음) 기사 =)
(relevant 언어 사양)
표준 모듈에 있을 때, 자격이 없는 사람은Range
호출은 정확히 동일한 범위 규칙을 준수합니다.
해당 범위에 지역 변수가 있는 경우
Range
, 그 다음은Range
…을 말합니다.만약 그 모듈에 이름을 가진 멤버가 있다면,
Range
, 그 다음은Range
…을 말합니다.현재 프로젝트에 글로벌 변수가 있는 경우
Range
, 그 다음은Range
…을 말합니다.참조된 프로젝트 또는 유형 라이브러리에 전역 범위 식별자가 있는 경우
Range
, 그 다음은Range
…을 말합니다.
(assuming의 그림자도 보이지 않음)Range
해당 모듈/프로젝트에서 식별자가 발생하고 있음)
이 경우 전역 범위 식별자는 숨겨진 곳에서 찾을 수 있습니다.Global
모듈:
언급URL : https://stackoverflow.com/questions/51752543/thisworksheet-equivalent
'programing' 카테고리의 다른 글
안드로이드는 거의 실시간 푸시 알림을 지원합니까? (0) | 2023.10.20 |
---|---|
총 열거 항목 수 가져오기 (0) | 2023.10.20 |
W3TOTAL CASH: Disk 기본 대비 Disk 향상 (0) | 2023.10.20 |
서버에 연결할 수 없습니다. tcp: lookup: 해당 호스트가 없습니다. (0) | 2023.10.20 |
자바스크립트에서 동적 게터/세터를 구현할 수 있습니까? (0) | 2023.10.20 |