2013-08-15 4 views
0

저는 건물에있는 다양한 vba 사용자 지정 개체에서 동일한 속성과 메서드를 복사하여 붙여 넣는 작업을 꽤 많이하고 있습니다. VBA에서 하나의 개체처럼 사용자 지정 개체 계층을 만들고 다른 개체의 속성과 메서드를 상속하는 방법 내가 좋아하는 뭔가를 쓰기 prob는 것이다 파이썬에서Excel-VBA의 개체 계층 구조

:

클래스 자동차 (Object)를

어떤

클래스 SlowCar (자동차)

상속을 어떤

클래스 FastCar (자동차)

상속 사전에 어떤

TKS.

+0

여기에 가서 : http://www.freevbcode.com/ShowCode.asp?ID=2970 - VB6에 대한 것이지만 VBA에서 동일해야합니다. –

+0

이것은 또한 당신이 필요로하는 것을 가지고 있습니다. http://www.vb-helper.com/howto_interface_inheritance.html – user3357963

답변

0

나는 당신이 말하는 것을 이해하는 경우, 이것은 클래스 모듈을 통해 수행 할 수 있습니다. VBA를 편집기에서

  1. , 삽입> 클래스 모듈 속성 창을 통해
  2. 변경 ( 예를 들어 Car) 당신이 원하는에 클래스 모듈의 이름 (F4를 눌러 보이게에 경우 아직하지 않았다)

이제 클래스 모듈을 만들었으므로 변수 및/또는 속성을 정의 할 수 있습니다. 예제는 아래 Car 클래스 모듈로 갈 것입니다 당신의 모듈에서

Private carName As String 
Private carSpeed As Integer 

' Car Name 
Public Property Get Name() As String 
    Name = carName 
End Property 
Public Property Let Name(result As String) 
    carName = result 
End Property 

' Car Speed 
Public Property Get Speed() As Integer 
    Speed = carSpeed 
End Property 
Public Property Let Speed(result As Integer) 
    carSpeed = result 
End Property 

다음 자동차 이름과 속도를 유지하는 객체를 생성, 다음을 수행 할 수 있습니다

Sub CreateMyCars() 
Dim slowCar as Car 
Dim fastCar as Car 

    Set slowCar = New Car 
    Set fastCar = New Car 

    slowCar.Name = "GoKart" 
    slowCar.Speed = 35 

    fastCar.Name = "Ferarri" 
    fastCar.Speed = 185 
End Sub 
+0

흠,별로 Jaycal이 아닙니다. SlowCar와 FastCar는 Car의 인스턴스가 아니라 객체 자체입니다. 것은 그들이 추가되거나 덮어 써지는 것을 더하여 Car에 지어지는 속성이 무엇이든 상속받을 것입니다. 그래서 하나는 복사/붙여 넣기가 필요하지 않습니다 '무엇이든지'는 자동차의 모든 하위 유형입니다. –

+0

글쎄, 나는 당신이 "당신이 말하는 것을 이해하지 못했을 것"이라고 생각한다. "FastCar"가 자동으로 모든 메소드와 속성을 갖는 자바 인터페이스와 비슷한 것을 말하고있다. ? (내 순결을 용서해주십시오 ...) – Jaycal

0

VBA를 통해 상속을 지원합니다 인터페이스를 사용하지만, 구현이 아닌 메소드의 서명 만 "상속"합니다.

개체 구현을 재사용하는 방법은 구성을 통해 이루어집니다.

Class Car(Object) 
    whatever 

Class SlowCar(Car) 
    Implements Car 

    private mCar   as Car 

    Private Sub Class_Initialize 
     set mCar = new Car 
    End Sub 

    Private Sub Car_whatever 
     Call mCar.whatever 
    End Sub 

FastCar에 대해서도 동일합니다.