SolidWorks VBA 매크로를 통한 문서 열기 및 부품 정보 조작

문서 열기 (OpenDoc6 사용)

SolidWorks에서 특정 파일 경로에 있는 부품 문서를 여는 VBA 매크로 예제입니다. 프로그램 실행 시 아무 문서도 열려 있지 않아도 지정된 SLDPRT 파일을 로드할 수 있습니다.

Option Explicit

Dim swApp As SldWorks.SldWorks

Sub main()
    Set swApp = Application.SldWorks
    
    Dim filePath As String
    filePath = "D:\崔胜利\凯帝隆\湖北武穴锂宝\solidworks\e0301-P0321.SLDPRT"
    
    Dim docType As Long
    docType = swDocumentTypes_e.swDocPART
    
    Dim openOptions As Long
    openOptions = swOpenDocOptions_e.swOpenDocOptions_LoadModel
    
    Dim configName As String
    configName = ""
    
    Dim errorCode As Long
    Dim warningCode As Long
    
    swApp.OpenDoc6 filePath, docType, openOptions, configName, errorCode, warningCode
    
    If errorCode <> 0 Then
        MsgBox "문서 열기 실패: 오류 코드 " & errorCode
    End If
End Sub

활성 문서 경로 가져오기

현재 SolidWorks에서 활성화된 문서의 전체 파일 경로를 확인하고 사용자에게 알리는 코드입니다.

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim activeModel As SldWorks.ModelDoc2

Sub main()
    Set swApp = Application.SldWorks
    Set activeModel = swApp.ActiveDoc
    
    If activeModel Is Nothing Then
        swApp.SendMsgToUser "열려 있는 문서가 없습니다."
        Exit Sub
    End If
    
    Dim fullPath As String
    fullPath = activeModel.GetPathName
    swApp.SendMsgToUser "현재 문서 경로: " & fullPath
End Sub

부품이 용접 구조인지 확인

활성 문서가 용접체(Weldment)인지 판단하는 매크로입니다. PartDoc 객체로 형변환하여 IsWeldment 속성을 사용합니다.

Option Explicit

Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim activeModel As SldWorks.ModelDoc2
    Dim partDoc As SldWorks.PartDoc
    
    Set swApp = Application.SldWorks
    Set activeModel = swApp.ActiveDoc
    
    If activeModel Is Nothing Then
        swApp.SendMsgToUser2 "먼저 부품 파일을 열어주세요.", swMbStop, swMbOk
        Exit Sub
    End If
    
    Set partDoc = activeModel
    
    If partDoc.IsWeldment Then
        swApp.SendMsgToUser "이 부품은 용접 구조입니다."
    Else
        swApp.SendMsgToUser "이 부품은 일반 부품입니다."
    End If
End Sub

재질 정보 읽기

지정된 구성(configuration)에서 재질 이름과 재질 데이터베이스 경로를 가져오는 예제입니다. Immediate Window에 출력됩니다.

Option Explicit

Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim activeModel As SldWorks.ModelDoc2
    Dim partDoc As SldWorks.PartDoc
    Dim materialName As String
    Dim materialDB As String
    
    Set swApp = Application.SldWorks
    Set activeModel = swApp.ActiveDoc
    Set partDoc = activeModel
    
    If Not activeModel.GetType = swDocumentTypes_e.swDocPART Then
        Debug.Print "부품 문서가 아닙니다."
        Exit Sub
    End If
    
    materialName = partDoc.GetMaterialPropertyName2("Default", materialDB)
    
    Debug.Print "파일 경로: " & activeModel.GetPathName
    Debug.Print "적용된 재질: " & materialName
    Debug.Print "재질 DB 위치: " & materialDB
End Sub

재질 변경하기

특정 구성에 새로운 재질을 적용하는 코드입니다. 사용자 정의 .sldmat 파일을 참조하여 재질을 설정합니다.

Option Explicit

Const CUSTOM_MATERIAL_DB As String = "C:/ProgramData/SolidWorks/SOLIDWORKS 2022/自定义材料/自定义材料.sldmat"

Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim activeModel As SldWorks.ModelDoc2
    Dim partDoc As SldWorks.PartDoc
    
    Set swApp = Application.SldWorks
    Set activeModel = swApp.ActiveDoc
    Set partDoc = activeModel
    
    ' 두 가지 구성에 동일한 재질 적용
    partDoc.SetMaterialPropertyName2 "기본<가공>", CUSTOM_MATERIAL_DB, "PPH"
    partDoc.SetMaterialPropertyName2 "기본<용접>", CUSTOM_MATERIAL_DB, "PPH"
    
    activeModel.ForceRebuild3 False
    Debug.Print "재질이 성공적으로 업데이트되었습니다."
End Sub

모든 구성 순회 및 강제 리빌드

모델에 존재하는 모든 구성(configuration)을 하나씩 탐색하며 리빌드를 수행합니다. 디버깅 목적으로 Immediate Window에 정보를 출력합니다.

Option Explicit

Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim activeModel As SldWorks.ModelDoc2
    Dim configNames As Variant
    Dim i As Integer
    
    Set swApp = Application.SldWorks
    Set activeModel = swApp.ActiveDoc
    
    Debug.Print "대상 파일: " & activeModel.GetPathName
    configNames = activeModel.GetConfigurationNames
    
    For i = 0 To UBound(configNames)
        Dim currentConfig As String
        currentConfig = configNames(i)
        
        Debug.Print "구성 처리 중: " & currentConfig
        
        ' 구성 표시
        activeModel.ShowConfiguration2 currentConfig
        
        ' 리빌드 실행
        activeModel.ForceRebuild3 False
    Next i
End Sub

문서 저장 및 닫기

현재 문서를 무음 모드로 저장하고, 성공 시 자동으로 닫는 절차를 포함합니다.

Option Explicit

Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim activeModel As SldWorks.ModelDoc2
    Dim errorStatus As Long
    Dim warningStatus As Long
    
    Set swApp = Application.SldWorks
    Set activeModel = swApp.ActiveDoc
    
    If activeModel Is Nothing Then Exit Sub
    
    Debug.Print "저장 시도: " & activeModel.GetPathName
    
    If activeModel.Save3(swSaveAsOptions_Silent, errorStatus, warningStatus) Then
        Debug.Print "저장 성공 - 문서 닫는 중..."
        swApp.CloseDoc activeModel.GetTitle
    Else
        Debug.Print "저장 실패 | 오류: " & errorStatus & ", 경고: " & warningStatus
    End If
End Sub

태그: SolidWorks VBA OpenDoc6 PartDoc ModelDoc2

6월 2일 00:44에 게시됨