2014-04-05 2 views
0

저는이 말고 새롭기 때문에 어떤 용어라도 망치면 유감입니다. 아무도 도움이나 생각을 가져 주셔서 감사합니다.vba sub는 클래스 객체 참조에 텍스트 문자열을 삽입합니다.

나는 다음과 같은 잘못된 코드 한 : 나는 ExampleSub ("치즈")을 호출하는 경우

Sub ExampleSub(text As String) 
    ClassObject." & text & "_attribute = 1 
End Sub 

그래서, 나는 그것이 1.

어떤 생각이 동일 ClassObject.cheese_attribute를 설정 하시겠습니까? 나는 그것이 가능하다는 것을 확신하지 못한다.

감사합니다.

+0

그런 텍스트 한정자로 개체를 참조 할 수는 없습니까? 귀하의 질문은 실제로 가능하지 않은 대답을 전제로합니다. 데이터 구조, 해결하려는 문제 등을보다 자세하게 설명 할 수 있습니까? 우리가 실제로하려는 일에 대해 더 많이 안다면 아마도 더 나은 해결책이있을 것입니다. –

+2

'CallByName'을보세요 - http://support.microsoft.com/kb/186143 –

답변

1

다음은 작동하는 다른 방법입니다. classobject의 Properties 중 하나로 스크립트 사전 개체를 사용하십시오. 키 문자열이며 값이 임의의 다른 타입 (객체 범위, 통합, 정수 변형/배열 등)

그래서 만약 사전을 사용할 수있을 수 키/값 쌍의 요소를 저장 The Dictionary Object is pretty neat, 이러한 모든 명명 된 특성을 포함하는 개체. 이미 존재하지 않는 경우 사전 키가 자동으로 항목을 추가 호출

Sub ExampleSub(text As String) 
    ClassObject.Attributes(text) = 1 
End Sub 

,하지만 :

Private pAttributes as Object 

Sub Class_Initialize() 
    '## Initialize this object to avoid a 91 error 
    Set pAttributes = CreateObject("Scripting.Dictionary") 
End Sub 

Public Property Get Attributes() As Object 
    Set Attributes = pAttributes 
End Property 
Public Property Let Attributes(lAttributes As Object) 
    Set pAttributes = lAttributes 
End Property 

그런 다음 코드에서 당신이 간단하게 수행 할 수 클래스 모듈에서 다음과 같은 코드를 추가 더 많은 제어가 필요하다면 다음을 할 수 있습니다 :

Sub AnotherExample(text as String) 
    If ClassObject.Attributes.Exists(text) Then 
     MsgBox text & " already exists!", vbInformation 
    Else: 
     ClassObject.Attributes(text) = 1 
    End If 
End Sub 
+0

매우 깔끔합니다. 고맙습니다! 여기에 예제 코드를 가지고 놀았으며 지금까지는 이것이 작동하지 않을 이유가 없습니다. 앞으로 2 ~ 3 일 동안 실제 프로젝트를 진행할 것입니다. 작동하는 경우이 케이스를 닫고 해결 된 것으로 표시합니다. 정말 고맙습니다! – Logan

+0

@Logan 당신은 이것을 검토 할 기회가 있었습니까? 그렇다면이 대답을 수락하는 것을 고려하십시오 ... –

+0

지연에 대해 사과드립니다. 할거야! 도와 줘서 고마워. 이것은 매우 강력한 방법입니다! – Logan

관련 문제