반응형
VBA에서 사용자 지정 데이터 유형 사용
나는 엑셀용 VBA에서 커스텀 데이터 타입을 만들려고 합니다.이 데이터 유형을 "트럭"이라고 부릅니다.각 트럭에는 다음과 같은 속성이 있습니다.
NumberOfAxles (this is an integer)
AxleWeights (this is an array of doubles)
AxleSpacings (this is an array of doubles)
데이터 유형 "truck"(truck(1), truck(2)...의 여러 인스턴스를 생성할 수 있습니까?등), 그리고 위에 나열한 속성을 해당 인스턴스에 읽고 쓰시겠습니까?
예:
Truck(1).NumberOfAxles = 2
Truck(1).AxleWeights(1) = 15.0
Truck(1).AxleWeights(2) = 30.0
Truck(1).AxleSpacings(1) = 8.0
Truck(2).NumberOfAxles = 3
Truck(2).AxleWeights(1) = 8.0
Truck(2).AxleWeights(2) = 10.0
Truck(2).AxleWeights(3) = 12.0
Truck(2).AxleSpacings(1) = 20.0
Truck(2).AxleSpacings(2) = 4.0
등등.위의 구문은 아마도 틀렸을 것입니다. 저는 제가 생각해내야 할 구조를 보여드리고 싶었습니다.
데이터 구조에 데이터를 쓰고 필요에 따라 다음과 같이 호출하려고 합니다.
Truck(i).NumberOfAxles
Truck(i).AxleWeights(j)
Truck(i).AxleSpacings(j)
감사합니다!
물론 할 수 있습니다.
Option Explicit
'***** User defined type
Public Type MyType
MyInt As Integer
MyString As String
MyDoubleArr(2) As Double
End Type
'***** Testing MyType as single variable
Public Sub MyFirstSub()
Dim MyVar As MyType
MyVar.MyInt = 2
MyVar.MyString = "cool"
MyVar.MyDoubleArr(0) = 1
MyVar.MyDoubleArr(1) = 2
MyVar.MyDoubleArr(2) = 3
Debug.Print "MyVar: " & MyVar.MyInt & " " & MyVar.MyString & " " & MyVar.MyDoubleArr(0) & " " & MyVar.MyDoubleArr(1) & " " & MyVar.MyDoubleArr(2)
End Sub
'***** Testing MyType as an array
Public Sub MySecondSub()
Dim MyArr(2) As MyType
Dim i As Integer
MyArr(0).MyInt = 31
MyArr(0).MyString = "VBA"
MyArr(0).MyDoubleArr(0) = 1
MyArr(0).MyDoubleArr(1) = 2
MyArr(0).MyDoubleArr(2) = 3
MyArr(1).MyInt = 32
MyArr(1).MyString = "is"
MyArr(1).MyDoubleArr(0) = 11
MyArr(1).MyDoubleArr(1) = 22
MyArr(1).MyDoubleArr(2) = 33
MyArr(2).MyInt = 33
MyArr(2).MyString = "cool"
MyArr(2).MyDoubleArr(0) = 111
MyArr(2).MyDoubleArr(1) = 222
MyArr(2).MyDoubleArr(2) = 333
For i = LBound(MyArr) To UBound(MyArr)
Debug.Print "MyArr: " & MyArr(i).MyString & " " & MyArr(i).MyInt & " " & MyArr(i).MyDoubleArr(0) & " " & MyArr(i).MyDoubleArr(1) & " " & MyArr(i).MyDoubleArr(2)
Next
End Sub
트럭을 다음과 같이 정의하고 싶은 것 같습니다.Class속성 NumberOf 포함차축, 차축 중량 및 차축 간격.
클래스 모듈(여기서는 clsTrucks라고 함)에서 정의할 수 있습니다.
Option Explicit
Private tID As String
Private tNumberOfAxles As Double
Private tAxleSpacings As Double
Public Property Get truckID() As String
truckID = tID
End Property
Public Property Let truckID(value As String)
tID = value
End Property
Public Property Get truckNumberOfAxles() As Double
truckNumberOfAxles = tNumberOfAxles
End Property
Public Property Let truckNumberOfAxles(value As Double)
tNumberOfAxles = value
End Property
Public Property Get truckAxleSpacings() As Double
truckAxleSpacings = tAxleSpacings
End Property
Public Property Let truckAxleSpacings(value As Double)
tAxleSpacings = value
End Property
그런 다음 모듈에서 다음은 새 트럭과 그 속성을 정의하고 트럭 컬렉션에 추가한 다음 컬렉션을 검색합니다.
Option Explicit
Public TruckCollection As New Collection
Sub DefineNewTruck()
Dim tempTruck As clsTrucks
Dim i As Long
'Add 5 trucks
For i = 1 To 5
Set tempTruck = New clsTrucks
'Random data
tempTruck.truckID = "Truck" & i
tempTruck.truckAxleSpacings = 13.5 + i
tempTruck.truckNumberOfAxles = 20.5 + i
'tempTruck.truckID is the collection key
TruckCollection.Add tempTruck, tempTruck.truckID
Next i
'retrieve 5 trucks
For i = 1 To 5
'retrieve by collection index
Debug.Print TruckCollection(i).truckAxleSpacings
'retrieve by key
Debug.Print TruckCollection("Truck" & i).truckAxleSpacings
Next i
End Sub
이를 수행하는 방법은 여러 가지가 있으므로 클래스/수집이 최상의 설정인지 어레이/사전 등인지 여부에 따라 데이터를 사용하는 방법이 달라집니다.
언급URL : https://stackoverflow.com/questions/12414168/use-of-custom-data-types-in-vba
반응형
'programing' 카테고리의 다른 글
| Postgres 9.4의 JSONB 유형 열에 대한 업데이트 작업 수행 방법 (0) | 2023.05.10 |
|---|---|
| Nodejs의 절대 경로에서 파일 이름을 가져오시겠습니까? (0) | 2023.05.10 |
| 유효성 검사 이유입력(거짓)이 작동하지 않습니까? (0) | 2023.05.10 |
| ID 일회용 인터페이스의 올바른 사용 (0) | 2023.05.10 |
| 게시물:하나의 열에 대해서만 구별됨 (0) | 2023.05.10 |