본문 바로가기
  • Welcome!
VBA, VB.NET For Creo

현재 활성화된 폴더의 하위폴더 알아보기

by ToolBOX01 2022. 8. 30.
반응형

현재 작업공간 아래에 있는 하위 폴더들의 이름을 알고 싶습니다. "IpfcBaseSession.ListSubdirectories()" 함수를 사용 합니다. 

 

■ Creo VBA  API 문법

Function ListSubdirectories (Path as String [optional]) as Istringseq   
 - VBA인 경우 Istringseq 대신 Cstringseq 변수를 사용 합니다
 - 지정된 디렉토리 위치의 1단계 하위 디렉토리만을 나열합니다. 

 

Path : Parameters

          - 서브디렉토리를 표시 하고자 하는 ROOT 폴더를 입력 합니다.

         예제)  Dim workpath As String

                   workpath = "C:\PTC\WORK60"
                   Set Sequence = session.ListSubdirectories(workpath)
Returns:
         - 하위 디렉토리의 순서를 반환 합니다



■ VBA 기초 : SET 문

Set 문은 변수에 개체를 참조하도록 할당하는 경우에 사용되며, 변수는 Object 형식으로 선언합니다.
개체를 참조하도록 한다는 것은 지정된 개체가 가지고 있는 속성들의 값을 읽거나 쓰거나 할 수 있도록 한다는 것입니다.
Set 문은 보통 Workbook, Worksheet, Range 등 통합문서와 관련된 부분에 많이 사용됩니다.

 

예제 1) "Book1.xls" 라는 문서를 참조
             Dim myBook    As Workbook
             
             Set myBook = Workbooks("Book1.xls")

예제 2) "Book1.xls" 파일의 "Sheet1" 이라는 이름을 가진 워크시트를 참조
             Dim myBook    As Workbook
             Dim mySheet   As WorkSheet
            
            Set myBook = Workbooks("Book1.xls")
            Set mySheet = myBook.Sheets("Sheet1")

 

             다른 방법으로 표시하는 방법

             Set mySheet = Workbooks("Book1.xls").Sheets("Sheet1")

 

 

Class Istringseq (= Cstringseq )

문자열 시퀀스입니다. 사용자는 목록에서 정수 인덱스(위치)로 요소에 액세스할 수 있습니다. Sequence는 해당 요소에 대한 위치적(인덱싱된) 액세스 방법을 제공합니다. 시퀀스는 0을 기반으로 합니다.

 

1)  Property Count as Long [readonly]

     - 시퀀스의 항목 수를 반환합니다. 여기서는 서브 폴더의 수량을 표시 합니다.

     - Sequence 변수 선언 입니다   /  Dim Sequence As Cstringseq

     - Sequence 변수에 현재 작업 공간 하위 폴더 수량을 가져 옵니다 
       Set Sequence = session.ListSubdirectories(cutrentworkfolderh)
       subcount = Sequence.Count

 

2) Function Item ( Index as Long ) as String

      - 시퀀스의 인덱스로 항목에 액세스합니다. 인덱스가 범위를 벗어나면 이 메서드는  cipXInvalidSeqIndex 예외를
        발생시킵니다. (오류 메세지)

      - foldername 변수 선언 입니다   / Dim foldername As String
        foldername 변수에 폴더 이름을 가져 옵니다 / foldername  = Sequence.Item(i) 

 

■ 소스 코드

Sub subpath_Name()
    
On Error GoTo RunError
    Dim asynconn As New pfcls.CCpfcAsyncConnection
    Dim conn As pfcls.IpfcAsyncConnection
    Dim session As pfcls.IpfcBaseSession
    Dim cutrentworkfolder As String
    Dim Sequence As Cstringseq
    Dim subfoldercount As Long
    Dim foldername As String
    Dim i As Integer
    
   
    Set conn = asynconn.Connect("", "", ".", 5)
    Set session = conn.session
   
    ' Current Creo Wokrfolder
    cutrentworkfolder = session.GetCurrentDirectory
    
    Set Sequence = session.ListSubdirectories(cutrentworkfolderh)
    
    ' Sub Wokrfolder count
    subcount = Sequence.Count
    
    If subcount > 0 Then
        For i = 0 To subcount - 1
            foldername = Sequence.Item(i)
            Cells(i + 1, 1).Value = foldername
        Next i
    
        Call MsgBox("폴더가 표시 되었습니다")
        
     Else
        Call MsgBox("하위 폴더가 없습니다")
        
     End If
    
    'Disconnect with Creo
    conn.Disconnect (2)

    
Exit Sub
    
RunError:
    If Err.Number <> 0 Then
        MsgBox "Process Failed : Unknown error occurred." + Chr(13) + _
                "Error No: " + CStr(Err.Number) + Chr(13) + _
                "Error: " + Err.Description, vbCritical, "Error"
        If Not conn Is Nothing Then
            If conn.IsRunning Then
                conn.Disconnect (2)
            End If
        End If
    End If

End Sub

 

■ 사용 예제