[VBA] 만든 클래스를 추가 기능으로 사용
방법
1. 보통 클래스 모듈 만들기
여기에서는 ClassInXlam
라는 이름으로 합니다.
ClassInXlam (클래스 모듈)Option Explicit
Public str As String
' strの中身を表示する
Public Sub ShowStr()
Debug.Print "str=" & str
End Sub
2. 외부에서 인스턴스를 검색하는 함수 추가
외부에서 직접 New 할 수 없으므로 표준 모듈을 추가하고 외부에서 인스턴스를 검색하는 함수를 작성합니다.
여기서 모듈은 Root
라는 이름으로 지정됩니다.
Root(표준 모듈)Option Explicit
Public Function CreateClassInXlam(str As String) As ClassInXlam
Dim tmpClass As ClassInXlam
Set tmpClass = New ClassInXlam
tmpClass.str = str
Set CreateClassInXlam = tmpClass
End Function
3. 클래스의 속성을 PublicNotCreatable로 설정
속성 창에서 클래스의 Instancing 속성을 2 - PublicNotCreatable
로 설정합니다.
(완전한 Public에는 설정할 수 없습니다.)
이제 외부에서 클래스 이름을 사용할 수 있습니다.
4. 프로젝트의 이름 변경
기본 VBAProject로 남아 있으면 다른 파일에서 참조할 때 이름이 충돌하여 오류가 발생합니다.
프로젝트 탐색기에서 대상 프로젝트를 마우스 오른쪽 버튼으로 클릭하여 적절한 이름으로 변경합니다.
5. Excel 추가 기능 형식으로 저장
다른 이름으로 저장에서 .xlam 형식을 선택하여 저장합니다.
여기까지 애드인 측의 준비는 종료입니다.
외부에서 참조해보기
새 책을 열고 거기에서 찾아보십시오.
1. 추가 기능에 참조 설정하기
VBE의 도구 > 참조 설정 대화 상자의 찾아보기에서 방금 만든 xlam 파일을 선택합니다.
"OK"를 누르면 프로젝트 탐색기의 "참조 설정"에 참조 대상으로 추가됩니다.
2. 사용
이런 느낌으로 사용할 수 있습니다.
Intellisense도 사용할 수 있습니다.
표준 모듈Option Explicit
Sub test()
Dim instanceOfClass As ClassInXlam
Set instanceOfClass = CreateClassInXlam("test")
instanceOfClass.ShowStr ' => str=test
End Sub
외부에서 인스턴스화하는 인터페이스 정보
다음과 같이 하면ClassInXlam.Create()
라고 쓸 수 있어 Static 메소드로부터 작성되어 있는 것처럼 보이고 멋집니다.
1. 클래스 모듈에 Create 메서드 만들기
Create 메서드는 외부 파일에서 인스턴스를 만들 수 있기 때문입니다.
ClassInXlam (클래스 모듈)Option Explicit
Public str As String
' strの中身を表示する
Public Sub ShowStr()
Debug.Print "str=" & str
End Sub
' ちなみにCreateには引数も渡せる
Public Function Create(str As String) As ClassInXlam
Dim tmpClass As ClassInXlam
Set tmpClass = New ClassInXlam
tmpClass.str = str
Set Create = tmpClass
End Function
2. 인스턴스 생성을 위한 공용 변수 만들기
추가 기능 측 루트 모듈의 내용은 다음과 같습니다.
Root(표준 모듈)Option Explicit
Public ClassInXlam As New ClassInXlam
이 퍼블릭 변수를 경유해 외부로부터 인스턴스를 취득합니다.As New
이므로 항상 인스턴스가 포함되어 있음(Nothing이 아님)이 보장됩니다.
변수명은 클래스명과 같아도 문제없는 것 같습니다.
3. 사용
이제 외부에서 다음과 같이 사용할 수 있습니다.
표준 모듈Option Explicit
Sub test()
Dim instanceOfClass As ClassInXlam
Set instanceOfClass = ClassInXlam.Create("test")
instanceOfClass.ShowStr ' => str=test
End Sub
주의점
실제로는 ClassInXlam
라는 퍼블릭 변수에 들어 있는 인스턴스의 메소드를 사용하고 있을 뿐입니다.
생성을 위한 오직 하나의 인스턴스가 존재하기 때문에 문제가 되는 장면도 있을지도 모릅니다.
Reference
이 문제에 관하여([VBA] 만든 클래스를 추가 기능으로 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Kamo123/items/020bd3f64ca15593a216
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Option Explicit
Public str As String
' strの中身を表示する
Public Sub ShowStr()
Debug.Print "str=" & str
End Sub
Option Explicit
Public Function CreateClassInXlam(str As String) As ClassInXlam
Dim tmpClass As ClassInXlam
Set tmpClass = New ClassInXlam
tmpClass.str = str
Set CreateClassInXlam = tmpClass
End Function
새 책을 열고 거기에서 찾아보십시오.
1. 추가 기능에 참조 설정하기
VBE의 도구 > 참조 설정 대화 상자의 찾아보기에서 방금 만든 xlam 파일을 선택합니다.
"OK"를 누르면 프로젝트 탐색기의 "참조 설정"에 참조 대상으로 추가됩니다.
2. 사용
이런 느낌으로 사용할 수 있습니다.
Intellisense도 사용할 수 있습니다.
표준 모듈
Option Explicit
Sub test()
Dim instanceOfClass As ClassInXlam
Set instanceOfClass = CreateClassInXlam("test")
instanceOfClass.ShowStr ' => str=test
End Sub
외부에서 인스턴스화하는 인터페이스 정보
다음과 같이 하면ClassInXlam.Create()
라고 쓸 수 있어 Static 메소드로부터 작성되어 있는 것처럼 보이고 멋집니다.
1. 클래스 모듈에 Create 메서드 만들기
Create 메서드는 외부 파일에서 인스턴스를 만들 수 있기 때문입니다.
ClassInXlam (클래스 모듈)Option Explicit
Public str As String
' strの中身を表示する
Public Sub ShowStr()
Debug.Print "str=" & str
End Sub
' ちなみにCreateには引数も渡せる
Public Function Create(str As String) As ClassInXlam
Dim tmpClass As ClassInXlam
Set tmpClass = New ClassInXlam
tmpClass.str = str
Set Create = tmpClass
End Function
2. 인스턴스 생성을 위한 공용 변수 만들기
추가 기능 측 루트 모듈의 내용은 다음과 같습니다.
Root(표준 모듈)Option Explicit
Public ClassInXlam As New ClassInXlam
이 퍼블릭 변수를 경유해 외부로부터 인스턴스를 취득합니다.As New
이므로 항상 인스턴스가 포함되어 있음(Nothing이 아님)이 보장됩니다.
변수명은 클래스명과 같아도 문제없는 것 같습니다.
3. 사용
이제 외부에서 다음과 같이 사용할 수 있습니다.
표준 모듈Option Explicit
Sub test()
Dim instanceOfClass As ClassInXlam
Set instanceOfClass = ClassInXlam.Create("test")
instanceOfClass.ShowStr ' => str=test
End Sub
주의점
실제로는 ClassInXlam
라는 퍼블릭 변수에 들어 있는 인스턴스의 메소드를 사용하고 있을 뿐입니다.
생성을 위한 오직 하나의 인스턴스가 존재하기 때문에 문제가 되는 장면도 있을지도 모릅니다.
Reference
이 문제에 관하여([VBA] 만든 클래스를 추가 기능으로 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Kamo123/items/020bd3f64ca15593a216
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Option Explicit
Public str As String
' strの中身を表示する
Public Sub ShowStr()
Debug.Print "str=" & str
End Sub
' ちなみにCreateには引数も渡せる
Public Function Create(str As String) As ClassInXlam
Dim tmpClass As ClassInXlam
Set tmpClass = New ClassInXlam
tmpClass.str = str
Set Create = tmpClass
End Function
Option Explicit
Public ClassInXlam As New ClassInXlam
Option Explicit
Sub test()
Dim instanceOfClass As ClassInXlam
Set instanceOfClass = ClassInXlam.Create("test")
instanceOfClass.ShowStr ' => str=test
End Sub
Reference
이 문제에 관하여([VBA] 만든 클래스를 추가 기능으로 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Kamo123/items/020bd3f64ca15593a216텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)