SolidWorks 工程图 转PDF的宏(VBA 代码)

4 篇文章 2 订阅
2 篇文章 0 订阅

'当前SolidWorks工程图文件转PDF,可含多页的工程图
' ------------------------------------------------------------------------------
'****************************************
'---此模块演示一个可以延时关闭的消息框---API函数 未公开的
'****************************************
#If Win64 Then '64位
    Private Declare PtrSafe Function MsgBoxTimeout _
        Lib "user32" _
        Alias "MessageBoxTimeoutA" ( _
            ByVal hWnd As LongPtr, _
            ByVal lpText As String, _
            ByVal lpCaption As String, _
            ByVal wType As VbMsgBoxStyle, _
            ByVal wlange As Long, _
            ByVal dwTimeout As Long) _
    As Long
#Else
    Private Declare Function MsgBoxTimeout _
        Lib "user32" _
        Alias "MessageBoxTimeoutA" ( _
            ByVal hwnd As Long, _
            ByVal lpText As String, _
            ByVal lpCaption As String, _
            ByVal wType As VbMsgBoxStyle, _
            ByVal wlange As Long, _
            ByVal dwTimeout As Long) _
    As Long
#End If

'ShellExecute API函数
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" _
  Alias "ShellExecuteA" (ByVal hWnd As Long, _
  ByVal lpOperation As String, ByVal lpFile As String, _
  ByVal lpParameters As String, ByVal lpDirectory As String, _
  ByVal nShowCmd As Long) As Long

  
Option Explicit
  
    Dim swApp               As SldWorks.SldWorks
    Dim swModel             As SldWorks.ModelDoc2
    Dim swModelDocExt       As SldWorks.ModelDocExtension
    Dim swExportPDFData     As SldWorks.ExportPdfData
    Dim boolstatus          As Boolean
    Dim filename            As String
    Dim lErrors             As Long
    Dim lWarnings           As Long
    Dim strSheetName()     As String
    Dim varSheetName        As Variant
    Dim swSheet             As SldWorks.Sheet
    Dim value               As String
    Dim resolvedValOut      As String
    Dim swView              As SldWorks.View
    Dim swPart              As SldWorks.ModelDoc2
    Dim swCustProp          As CustomPropertyManager
    Dim nSheet              As Variant
    Dim pdfFileName         As String   'pdf文件名
    Dim swFrame As Object
    Dim ProgressBar As Object '进度条
Sub main()
  
    Set swApp = Application.SldWorks
  
    Set swModel = swApp.ActiveDoc
    If swModel Is Nothing Then
    MsgBox "无活动文档,请打开一个SW文件!", vbExclamation
    
    Exit Sub '退出Sub
    End If
    
    If swModel.GetType <> SwConst.swDocumentTypes_e.swDocDRAWING Then
    MsgBox ("当前活动文档不是2D工程图文件!")
    Exit Sub
    End If
    
    Set swFrame = swApp.Frame
    swApp.GetUserProgressBar ProgressBar '进度条
    
    filename = swModel.GetPathName
    
    If swModel.GetPathName = "" Then
     MsgBox ("请先保存文件!")
    Exit Sub
    End If
    
    Set swModelDocExt = swModel.Extension
    Set swExportPDFData = swApp.GetExportFileData(1)
    
               
    ReDim strSheetName(0)
    For Each nSheet In swModel.GetSheetNames
            strSheetName(UBound(strSheetName)) = nSheet
            ReDim Preserve strSheetName(UBound(strSheetName) + 1)
    Next nSheet
    
    varSheetName = strSheetName
    
    
    Set swSheet = swModel.GetCurrentSheet
    Set swView = swModel.GetFirstView
    Set swView = swView.GetNextView
    Set swPart = swView.ReferencedDocument
    Set swCustProp = swPart.Extension.CustomPropertyManager("")
    swCustProp.Get2 "H.B. Carbide Part#", value, resolvedValOut ' change property name here
            
    Dim fso As Scripting.FileSystemObject
    Set fso = New Scripting.FileSystemObject
           
    pdfFileName = Left$(filename, InStrRev(filename, ".") - 1) + ".PDF"
       
    If fso.FileExists(pdfFileName) Then
    
     Dim xRet1 As Long
    xRet1 = MsgBoxTimeout(0, "是否覆盖文件 " & pdfFileName, "覆盖文件 (5秒后自动覆盖)", vbYesNo + vbExclamation, 1, 5000)
    Select Case xRet1
    Case 32000
        Debug.Print "超时自动关闭"
        
    Case vbYes
      
        Debug.Print "选择""是""按钮"
    Case vbNo
        Debug.Print "选择""否""按钮"
        Exit Sub '退出
    End Select
   
   
    End If
          
    If swExportPDFData Is Nothing Then MsgBox "swExportPDFData Nothing"
    boolstatus = swExportPDFData.SetSheets(swExportData_ExportSpecifiedSheets, varSheetName)
    swExportPDFData.ViewPdfAfterSaving = False
    
    ProgressBar.Start 0, 100, "正在保存文件..."
    ProgressBar.UpdateProgress (50)
    boolstatus = swModelDocExt.SaveAs(pdfFileName, 0, 0, swExportPDFData, lErrors, lWarnings)
    'MsgBox pdfFileName
    ProgressBar.UpdateProgress (100)
    swFrame.SetStatusBarText ("另存为PDF文件OK:" & pdfFileName)
    Dim Result As Long
    
    
    
     Dim xRet2 As Long
    xRet2 = MsgBoxTimeout(0, "另存为PDF OK, 是否现在打开" & pdfFileName, "是否打开PDF (5秒后自动打开PDF)", vbYesNo + vbQuestion, 1, 5000)
    Select Case xRet2
    Case 32000
        Debug.Print "超时自动关闭"
        Result = ShellExecute(0&, vbNullString, pdfFileName, _
        vbNullString, vbNullString, vbNormalFocus)
        If Result < 32 Then MsgBox "Error 打开文件失败"
    Case vbYes
        Result = ShellExecute(0&, vbNullString, pdfFileName, _
        vbNullString, vbNullString, vbNormalFocus)
    If Result < 32 Then MsgBox "Error 打开文件失败"
    
    Case vbNo
        Debug.Print "选择""否""按钮"
    End Select
    
    ProgressBar.End
End Sub

 

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
批量SolidWorks文件为STEP格式可以通过编写代码来实现,以下是一个简单的示例: 首先,打开SolidWorks编辑器,新建一个。然后,编写下面的代码: Sub ConvertToStep() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swStepExportData As SldWorks.StepExportData Dim swModelDocExt As SldWorks.ModelDocExtension Dim swFile As String Dim swFolder As String Dim swFiles As Variant Dim i As Integer swFolder = "你的文件夹路径" '这里替换为需要换的文件夹路径 swFiles = Dir(swFolder & "\*.sldprt") '获取文件夹中所有sldprt文件 Set swApp = Application.SldWorks Do While swFiles <> "" swFile = swFolder & "\" & swFiles Set swModel = swApp.OpenDoc6(swFile, swDocPART, swOpenDocOptions_Silent, "", 0, 0) '判断文件是否打开成功 If Not swModel Is Nothing Then Set swModelDocExt = swModel.Extension Set swStepExportData = swModelDocExt.CreateStepData swStepExportData.FileName = Left(swFile, Len(swFile) - 7) & ".step" '将扩展名改为.step swModelDocExt.SaveAs swStepExportData swModel.CloseDoc End If swFiles = Dir Loop Set swApp = Nothing Set swModel = Nothing Set swStepExportData = Nothing Set swModelDocExt = Nothing End Sub 以上代码是一个简单的循环,它会遍历指定文件夹中的所有sldprt文件,并将其保存为STEP文件。在代码中,你需要将"你的文件夹路径"替换为实际的文件夹路径。此外,你还可以根据需要调整文件类型和保存路径。 在完成代码编写后,保存并运行它。此时,会自动将文件夹中的所有sldprt文件换为STEP格式,并保存在原文件所在目录中。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值