【利用VBA批量处理中望CAD的修改打印出PDF】

利用VBA批量处理中望CAD的修改打印出PDF

直接贴程序,没套路

Sub FindAllFile()
    Dim filename  As Variant
    Dim index As Integer
    fpath = "D:\Users\Desktop\"
    filename = Dir(fpath)
    Do While filename <> ""
        If Right(filename, 3) = "dwg" Then
            BlockUpdate fpath + filename, filename
            Debug.Print (filename + " Changed OK")
            index = index + 1
        End If
        filename = Dir
    Loop
    MsgBox ("已经完成修改" & index & "份")
End Sub
Sub BlockUpdate(fpath As String, filename As Variant)
    Dim ModelSpace As ZcadModelSpace
    Dim Blocks As ZcadBlocks
    Dim blkref As Variant
    Dim index, i, attindex As Integer
    Dim varAttributes  As Variant
    Dim frame As String
    ThisDrawing.Application.Documents.Open (fpath)
    Set ModelSpace = ThisDrawing.ModelSpace
    Set Blocks = ThisDrawing.Blocks
    For index = 0 To Blocks.Count - 1
        If Blocks.Item(index).Name = "BTL1" Then
            For i = 0 To Blocks.Item(index).Count - 1
                If TypeOf Blocks.Item(index).Item(i) Is ZcadText Then
                    If Blocks.Item(index).Item(i).TextString = "用户代号" Then
                        Blocks.Item(index).Item(i).TextString = "用户编码"
                    ElseIf Blocks.Item(index).Item(i).TextString = "CLIENT DRAWING NO." Then
                        Blocks.Item(index).Item(i).TextString = "USER CODE NO."
                    End If
                End If
            Next
         ElseIf Blocks.Item(index).Name = "SBWL_A4V" Then
            frame = "SBWL_A4V"
         ElseIf Blocks.Item(index).Name = "SBWL_A3H" Then
            frame = "SBWL_A3H"
         ElseIf Blocks.Item(index).Name = "SBWL_A2H" Then
            frame = "SBWL_A2H"
         ElseIf Blocks.Item(index).Name = "SBWL_A1H" Then
            frame = "SBWL_A1H"
         ElseIf Blocks.Item(index).Name = "SBWL_A0H" Then
            frame = "SBWL_A0H"
         End If
         
    Next
    For index = 0 To ModelSpace.Count - 1
        If TypeOf ModelSpace.Item(index) Is ZcadBlockReference Then
            If ModelSpace.Item(index).EffectiveName = "BTL1" Then
                Set blkref = ModelSpace.Item(index)
                varAttributes = blkref.GetAttributes
                For i = LBound(varAttributes) To UBound(varAttributes)
                    If varAttributes(i).TagString = "CLIENT_DWG{8}" Then
                        varAttributes(i).TextString = "XP-2-PRXJ-44-AA000001-DG-0001"
                    ElseIf varAttributes(i).TagString = "DWG_STATUS{7}" Then
                        varAttributes(i).TextString = "PRE"
                    End If
                Next
            End If
        End If
    Next
    
    ThisDrawing.Save
    PrintPDF filename, frame
    ThisDrawing.Save
    ThisDrawing.Application.Documents.Close
End Sub

Sub PrintPDF(file As Variant, frame As String)
    Dim currentplot As ZcadPlot
    Set currentplot = ThisDrawing.Plot
    file = Replace(file, ".dwg", ".PDF")
    file = GetIndex(file)
    ThisDrawing.ModelSpace.Layout.ConfigName = "DWG TO PDF.pc5"
    ThisDrawing.ModelSpace.Layout.PlotRotation = zc180degrees
    If frame = "SBWL_A4V" Then
        ThisDrawing.ModelSpace.Layout.CanonicalMediaName = "ISO_A4_(210.00_x_297.00_MM)"
    ElseIf frame = "SBWL_A3H" Then
        ThisDrawing.ModelSpace.Layout.CanonicalMediaName = "ISO_A3_(420.00_x_297.00_MM)"
    ElseIf frame = "SBWL_A2H" Then
        ThisDrawing.ModelSpace.Layout.CanonicalMediaName = "ISO_A2_(594.00_x_420.00_MM)"
    Else
        ThisDrawing.ModelSpace.Layout.CanonicalMediaName = "ISO_A1_(841.00_x_594.00_MM)"
    End If
    ThisDrawing.ModelSpace.Layout.CenterPlot = True
    ThisDrawing.ModelSpace.Layout.PlotType = zcExtents
    ThisDrawing.ModelSpace.Layout.StyleSheet = "PCCAD.ctb"
    ThisDrawing.Application.ZoomExtents
    currentplot.PlotToFile ("D:\Users\Desktop\" & file)
End Sub


Function GetIndex(str As Variant) As String
    Dim i, cnt, S, L As Integer
    cnt = 0
    For i = 1 To Len(str)
        If Mid(str, i, 1) = "-" Then
            cnt = cnt + 1
            If cnt = 4 Then
                S = i
                Exit For
            End If
            
        End If
    Next
    If cnt = 4 Then
        L = InStr(str, ".")
        GetIndex = Mid(str, 1, S - 1) + Mid(str, L)
    Else
        GetIndex = str
    End If
End Function

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值