문서 열기 (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