2016-11-22 3 views
1

내가하려고하는 것은 Autodesk Inventor입니다. 저는 스케치에서 여러 줄을 반복하는 프로그램을 작성하고 있습니다. 연결된 행 그룹을 모아서 콜렉션에 넣습니다. 그런 다음이 컬렉션을 처리하도록 처리합니다.컬렉션 컬렉션 - 참조보다는 값으로 하위 컬렉션을 만드는 방법?

임시 컬렉션에 줄을 추가 한 다음이 임시 컬렉션을 루프 컬렉션에 추가하여 각 루프에 대해 알 수없는 양의 컬렉션을 생성하지 않아도됩니다. 그러나 Clear 메서드를 사용하여 임시 컬렉션을 다시 설정하면 바로 루프 컬렉션에 밀어 넣은 정보가 지워집니다. 임시 모음에있는 것과 독립적 인 루프 모음의 정보를 만들 수있는 방법이 있습니까?

여러분도 알다시피, 문제는 내가 얼마나 많은 선들이 연결되어 있는지 모를 것이므로, 거기에 얼마나 많은 하위 컬렉션이 있을지 모를 것입니다.

다음 코드는 있습니다.

Dim oLoopColl As New Collection 
Dim oSubColl As ObjectCollection 
Set oSubColl = ThisApplication.TransientObjects.CreateObjectCollection 

For j = 1 To oSLColl.Count 
    oSubColl.Add (oSLColl.Item(j)) 
    'Check for last item to see if it is part of the first 
    If j = oSLColl.Count Then 
     If oSLColl.Item(j).EndSketchPoint Is oSLColl.Item(1).StartSketchPoint Then 
      MsgBox ("Last SL is part of first coll!") 
      oLoopColl.Item(1).Add (oSLColl.Item(j)) 
      oSubColl.Clear 
     Else 
      Call oLoopColl.Add(oSubColl, CStr(j)) 
     End If 
    Else 
     If Not oSLColl.Item(j).EndSketchPoint Is oSLColl.Item(j + 1).StartSketchPoint Then 
      Call oLoopColl.Add(oSubColl, CStr(j)) 
      oSubColl.Clear 
     End If 
    End If 
Next 
oSubColl.Clear 
Set oSubColl = Nothing 
+0

oLoopColl.Add (oSubColl, CStr (j)) 코드는 루프 콜렉션에 하위 콜렉션에'reference'를 추가합니다. 이 참조는 동일한 하위 모음을 가리키고 있으므로 하위 모음이 지워질 때 루프 모음은이 모음을 가리키며 이제는 비어 있습니다. 하위 컬렉션 'by-value'을 추가 할 수 없습니다. 매번 새 컬렉션을 만들고 하위 컬렉션의 요소를이 새 컬렉션에 복사 한 다음이 새 컬렉션을 루프 컬렉션에 추가 할 수 있습니다. 이 새 컬렉션을 지우지 않으면 루프 컬렉션에서 유지합니다. – dee

+0

그러나 루프의 하위 모음의 수를 가변적으로 처리하려면 어떻게해야합니까? 아는 한, 변수를 기반으로 변수를 정확하게 정의 할 수 없습니다. 즉 oLoop & i = oLoop1, oLoop2 for i = 1 ~ 2 – MechMachineMan

+0

아마 접근 방식을 다시 생각하고 ObjectCollection으로 필요로하는 호출을하기 전에 oLoops를 ObjectCollection으로 저장해야합니다. 배열에 저장하고 배열을 ObjectCollection으로 변환합니다. – MechMachineMan

답변

1

내가 코멘트에서 말하려고했던 것은 다음과 같습니다. 이 예에서 container에있는 items의 번호를 알 필요는 없음을 알 수 있습니다.


새로운 itemcontainer에 추가해야하는 경우 하나 만들 :

Set item = New Collection 

그런 다음이 새로운 item이 새 item

item.Add "Some-New-Item" 

그리고 마지막으로 추가 참조에을 항목을 추가 container

container.Add item 

containeritem이있는 메모리 장소에 대한 참조를 저장합니다. 그래서 다음 항목을 추가 한 다음 다음 항목을 추가 할 수 있습니다.


Option Explicit 

Private Const ColItem As String = "Col_Item_" 

Sub Demo() 
    Dim container As VBA.Collection 
    Dim item As VBA.Collection 

    Set container = New Collection 

    Set item = New Collection 
    item.Add ColItem & 1 
    item.Add ColItem & 11 
    item.Add ColItem & 111 
    container.Add item 

    Set item = New Collection 
    item.Add ColItem & 2 
    item.Add ColItem & 22 
    item.Add ColItem & 222 
    container.Add item 

    ' Clear is not part of VBA-Collection so Remove-all could simulate it 
    ' When Clear would be called here then all the items will be removed 
    ' and the container will reference an empty collection 
    item.Remove 2 

    Dim outer, inner 
    For Each outer In container 
     For Each inner In outer 
      Debug.Print inner 
     Next inner 
    Next outer 
End Sub 

출력 :

Col_Item_1 
Col_Item_11 
Col_Item_111 
Col_Item_2 
Col_Item_222 

why not use As New를 참조하십시오.