현재 작업공간 아래에 있는 하위 폴더들의 이름을 알고 싶습니다. "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
■ 사용 예제
'VBA, VB.NET For Creo' 카테고리의 다른 글
Creo Parametric VB API를 사용하여 PCF 파일을 읽고 열려 있는 활성 드로잉 모델을 인쇄하는 예제 코드 - By PTC (0) | 2022.09.03 |
---|---|
Part 파일을 jpg 이미지로 저장 하기 (0) | 2022.09.02 |
현재 활성화된 폴더 이름 알아보기 (0) | 2022.08.28 |
Creo VBA 실행 에러 메세지 처리 (0) | 2022.08.26 |
VBA 기초 - Hello World (0) | 2022.08.22 |