VBA 클래스 모듈의 속성을 허용합니다. 여러 개의 인수를 가질 수 있습니까?
지금까지 클래스 모듈에서 Let 속성을 사용한 제가 이해한 바로는 클래스 모듈에서 다음과 같이 설정한 것입니다.
Dim pName as String
Public Property Let Name(Value As String)
pName = Value
End Property
이 클래스의 개체를 만든 후 다음과 같이 속성을 설정할 수 있습니다.
MyObject.Name = "Larry"
:. 클래스 개의 할 수 ?클래스 속성에 여러 인수를 입력할 수 있습니까?예를 들어:
Dim pFirstName as String, pLastName as String
Public Property Let Name(FirstName As String, LastName As String)
pFirstName = FirstName
pLastName = LastName
End Property
그러면 클래스 밖에서 이 속성을 설정하려면 어떻게 해야 합니까?
MyObject.Name = ??
아니면 이것이 단지 불가능하다는 것이 명백한가요?
이미 두 가지 해결 방법이 있다는 것은 알고 있지만, 이 질문이 받는 조회수 때문에 원래 질문에 대답하는 것이 시도해 볼 가치가 있다고 생각했습니다.
에 대한 답
Let Property in VBA에서 여러 개의 인수를 가질 수 있습니까?
이라
네! 가능합니다.
먼저 GET 속성에 대해 이야기해 보겠습니다.이것을 다음과 같이 생각합니다.Class1
Private firstName as String
Private lastName as String
Public Property Get Name() As String
Name = firstName & " " & lastName
End Property
그Name
속성은 전체 이름을 반환합니다. 좋습니다. 속성을 사용하여 할당하는 방법.firstName
&lastName
번에 에번한?
참고 사항: 특수 문자로 구분된 단일 문자열을 전달하고 의 본문 안에서 분할하여 및 이름을 할당할 수 있지만, 이는 잊어버리고 제대로 수행합니다...
VBA에서 현재 설정의 기본 속성은 1개의 매개 변수를 사용하여 이름 또는 성에 할당합니다.
다음과 같은 것:
Public Property Let Name(value As String)
firstName = value
End Property
칙규:Get
변수를 매변수 지않으며사하용를을 사용합니다.Let
하나 가져가세요.그것은 매우 논리적입니다 왜냐하면Get
하지만 기본값 반지만하환을,,Let
표현하는 데이터에 값을 할당하려면 어딘가에서 값을 가져와야 합니다.이 시점에서 기억할 가치가 있습니다.Let
은 속은를할다니를 됩니다.=
서명한한.myObject.Name = "IdOnKnuu"
위의 규칙과 일관성을 유지할 경우 이론적으로 에 하나의 매개 변수를 추가하고 에 하나의 매개 변수를 추가할 수 있어야 한다는 것을 알고 있습니다.
그 일은 잊어버리자꾸나Let
일단 코멘트 아웃 - 그리고 파라미터를 추가합니다.Get
소유물.
Private firstName As String
Private lastName As String
Public Property Get Name(first As String) As String
Name = firstName & " " & lastName
End Property
'Public Property Let Name(value As String)
' firstName = value
'End Property
으로돌기아가로 Module1
의 .Class1
및형을 합니다.c.Name(
오, 지성이 뭔가를 기대하고 있다고요?아주 좋아요!
이 시점에서 이해할 가치가 있습니다.Get
반환 산재고first + last
현재 둘 다 비어 있으므로 무엇을 전달할지는 중요하지 않습니다.c.Name()
빈 문자열을 반환합니다.
좋아요, 댓글을 달아서 조정해 봅시다.Let
지금 속성...
사드노드로 : 다이하는경우동시이.Module1
및형을 합니다.c.
그리고 지능적인 감각을 갖지 마세요. 그것은 무언가가 있다는 것을 의미합니다.Class1
부서졌어요...우리는 이미 알고 있습니다 - 그것은.Let
ㅠㅠㅠㅠㅠㅠㅠㅠㅠ
는 매에개변추습니다했가에 했습니다.Get
재산, 같은 일을 합시다.Let
속성...
Public Property Let Name(first As String, value As String)
firstName = value
End Property
다시 시작해 보겠습니다.Module1
그리고 그것을 사용해 보세요.Let
속성:
기억하세요, 당신이 어떻게 그것을 사용했는지.Let
전에 부동산?가 있었습니다.
c.Name = "John"
하지만 지금, 당신의Let
에 추가 변수가 합니다.first as String
.
이것을 시도해 보는 것은 어떨까요?
c.Name("John") = "Smith"
이봐! 컴파일하고 실행하는 것 (빠른)
좋습니다. 결과를 확인해 보겠습니다!
Debug.print c.Name("John")
... 그것은 단지 보여줄 뿐입니다.Smith
바로 가기 창(+)...CtrlG정확히 우리가 찾던 것이 아닙니다.
으로돌기아가로 Let
속성 우리는 논쟁을 통해 2개의 가치를 파악하고 있지만 우리는 그 중 하나만 사용하고 있습니까?함수에는 두 가지 다른 값이 들어옵니다. 그렇죠?첫 번째 것은 다음과 같이 처리합니다.firstName
두 는 그고두번는째리는번.lastName
Public Property Let Name(first As String, last As String)
firstName = first
lastName = last
End Property
로 돌아가기Module1
Sub Main()
Dim c As New Class1
c.Name("John") = "Smith"
Debug.Print c.Name("John")
End Sub
현재 코드를 다시 실행하면 필요한 것을 얻을 수 있습니다.그것은 존 스미스를 인쇄하지만 기다려요!!! 왜 우리는 전체 이름을 검색하기 위해 이름을 전달해야 합니까?
하! 두 속성의 첫 번째 매개 변수를 만드는 것이 요령입니다.
코드를 요약하면 다음과 같습니다.
클래스 1.cls
Private firstName As String
Private lastName As String
Public Property Get Name(Optional first As String) As String
Name = firstName & " " & lastName
End Property
Public Property Let Name(Optional first As String, last As String)
firstName = first
lastName = last
End Property
모듈 1.bas
Sub Main()
Dim c As New Class1
c.Name("John") = "Smith"
Debug.Print c.Name ' prints John Smith
End Sub
따라서 기본적으로 속성을 통해 두 개 이상의 값을 할당할 수 있습니다.여러분을 다소 당황하게 할 수 있는 것은 구문입니다. 하지만 이 답변에서 제 설명이 여러분이 무엇이 무엇에서 왔는지, 왜 그런지 이해하는 데 도움이 되었기를 바랍니다.
그Get
속성은 선택적 매개 변수를 사용합니다. 실제로는 더미 매개 변수입니다.그것은 어디에서도 사용되지 않습니다.Get
속성을 수 Let
두 가지 매개 변수를 전달할 수 있습니다.은 또한 것을 줍니다.c.Name
파일
콜
Debug.Print c.Name("first")
여전히 가능하지만, 그러나."first"
매개 변수는 더미처럼 작동하며 실제 기본 데이터에 영향을 주지 않습니다.더미이며 실제 데이터에는 영향을 미치지 않습니다. 덤프하고 다음을 사용합니다.
Debug.print c.Name
확실히 더 편리합니다 :)
당신의 의견에 따르면 이 논리를 캡슐화하고 싶다면 아래와 유사한 것을 사용할 수 있습니다.
아래에는 하위 및 함수가 포함되어 있습니다.함수는 사용자 개체를 반환합니다.
Public Sub testing()
Dim t As Person
Set t = PersonData("John", "Smith")
End Sub
Public Function PersonData(firstName As String, lastName As String) As Person
Dim p As New Person
p.firstName = firstName
p.lastName = lastName
Set PersonData = p
End Function
사용자 클래스:
Dim pFirstName As String, pLastName As String
Public Property Let FirstName(FirstName As String)
pFirstName = FirstName
End Property
Public Property Get FirstName() As String
FirstName = pFirstName
End Property
Public Property Let LastName(LastName As String)
pLastName = LastName
End Property
Public Property Get LastName() As String
LastName = pLastName
End Property
클래스 내에서 공용 하위 프로시저로 사용하여 다음 작업을 수행합니다.
Public Sub testing()
Dim myPerson As New Person
myPerson.SetName "KaciRee", "Software"
End Sub
사용자 클래스:
Dim pFirstName As String, pLastName As String
Public Property Let FirstName(FirstName As String)
pFirstName = FirstName
End Property
Public Property Get FirstName() As String
FirstName = pFirstName
End Property
Public Property Let LastName(LastName As String)
pLastName = LastName
End Property
Public Property Get LastName() As String
LastName = pLastName
End Property
Public Sub SetName(FirstName As String, LastName As String)
pFirstName = FirstName
pLastName = LastName
End Sub
언급URL : https://stackoverflow.com/questions/13823367/let-property-of-vba-class-modules-is-it-possible-to-have-multiple-arguments
'programing' 카테고리의 다른 글
SQL에서 열 값의 발생 횟수를 효율적으로 계산하는 방법은 무엇입니까? (0) | 2023.08.22 |
---|---|
스파이더 엔진에 의해 결과 행이 두 배로 증가합니다. (0) | 2023.08.22 |
Excel 파일을 읽을 때 Pandas 데이터 프레임 및 문자 인코딩 (0) | 2023.08.17 |
Flexbox 열을 왼쪽과 오른쪽으로 정렬하는 방법은 무엇입니까? (0) | 2023.08.17 |
문자열에 다른 문자열이 포함되어 있습니다. (0) | 2023.08.17 |