russell84 发表于 2022-7-6 17:14:37

将Dwg集从DA转换为CC

有人能给我一些关于如何改进我的编码格式等的建议吗?关于如何改进下面的代码有什么建议吗??
 
谢谢
 
下面的代码是我编写的将图形集从DA更改为CC的代码的一部分
它首先从R:\Jobs 2007\07447\Acad\DA复制完整的图形集,并将其粘贴到R:\Jobs 2007\07447\Acad\CC
将单个图形从07447\u DA\u C000重命名为07447\u CC\u C000,然后进入图形并将标题栏中的属性从07447\u DA\u C000重命名为07447\u CC\u C000,然后卸载外部参照-将其从XR07447\u DA\u SURVEY重命名为XR07447\u CC\u SURVEY,并将其重新定位到新的CC文件夹。
 
如果需要的话,我可以提供表格。
 
干杯伙计们
 
 
Public FormResultREV As Boolean

Sub RevUpDrawings()
Dim tmpyearREV As Integer
Dim JobDirectorycurrentREV, jobdirectoryNEWREV, JobNoDirectory, JobYearREV As String
Dim CURREV, NEWREV, CURREVPATH, NEWREVPATH, result As String
Dim fs
If FormResultREV Then

       tmpyearREV = CDbl(VBA.Left(UserFormcombined.JOBNOREV, 2))
   If tmpyearREV > 80 Then
       tmpyearREV = 1900 + tmpyearREV
   Else
       tmpyearREV = 2000 + tmpyearREV
   End If
       JobYearREV = CStr(tmpyearREV)
       CURREV = "_" & UserFormcombined.CurrentStageREV & "_"
       NEWREV = "_" & UserFormcombined.NewStageREV & "_"
       jobdirectoryNEWREV = "R:\Jobs " & JobYearREV & "\" & UserFormcombined.JOBNOREV & "\ACAD\" & UserFormcombined.NewStageREV
       JobDirectorycurrentREV = "R:\Jobs " & JobYearREV & "\" & UserFormcombined.JOBNOREV & "\ACAD\" & UserFormcombined.CurrentStageREV

   'Create new directory and copy all old contents
   Set fs = CreateObject("scripting.filesystemobject")
   MkDir jobdirectoryNEWREV
   fs.CopyFile JobDirectorycurrentREV & "\*", jobdirectoryNEWREV
   'Rename all drawings
   result = Dir((jobdirectoryNEWREV & "\*.dwg"))
   Do
       If result = "" Then Exit Do
         Name jobdirectoryNEWREV & "\" & result As jobdirectoryNEWREV & "\" & Replace(result, CURREV, NEWREV)
       result = Dir()
   Loop
         MsgBox "The entire " & UserFormcombined.CurrentStageREV & " drawing set for Job Number " & UserFormcombined.JOBNOREV & " has been converted to a " _
         & UserFormcombined.NewStageREV & " drawing set." & VBA.Chr(13) & "Drawings have been created in the new directory " & jobdirectoryNEWREV & VBA.Chr(13) & _
         "Drawings will be now be opened so that title block attributes can be edited and xrefs can be renamed and repathed." & VBA.Chr(13) & VBA.Chr(13) & "Please wait until finished. Thank you", vbInformation, "ATTENTION PLEASE READ"
renamedrawingnumbers
End If
End Sub


Function renamedrawingnumbers()
Dim i, j, k As Integer
Dim element, ArrayAttributes
Dim jobdirectoryNEWREV, JobYearREV, tmpyearREV, OldDWGNO, NewDWGNO As String
Dim CURREV, NEWREV, revtest As String
   tmpyearREV = CDbl(VBA.Left(UserFormcombined.JOBNOREV, 2))
   If tmpyearREV > 80 Then
   tmpyearREV = 1900 + tmpyearREV
   Else
   tmpyearREV = 2000 + tmpyearREV
   End If
   JobYearREV = CStr(tmpyearREV)

   revtest = CStr(VBA.Left(UserFormcombined.NewStageREV, 1))
   If revtest = "C" Then
   revtest = "A"
   Else
   revtest = "01"
   End If

       CURREV = "_" & UserFormcombined.CurrentStageREV & "_"
       NEWREV = "_" & UserFormcombined.NewStageREV & "_"
       jobdirectoryNEWREV = "R:\Jobs " & JobYearREV & "\" & UserFormcombined.JOBNOREV & "\ACAD\" & UserFormcombined.NewStageREV

On Error Resume Next
       For i = 1 To UserFormcombined.ListBox5REV.ListCount
       UserFormcombined.ListBox5REV.ListIndex = i - 1
       Documents.Open jobdirectoryNEWREV & "\" & UserFormcombined.ListBox5REV.Text    'open each drawing in listbox

                   For j = 0 To ThisDrawing.Layouts.Count - 1 'loop through each tab and update info
               If ThisDrawing.Layouts(j).Name = "Model" Then GoTo 10
               ThisDrawing.SendCommand "layout s " & ThisDrawing.Layouts(j).Name & vbCr
               For Each element In ThisDrawing.PaperSpace
                   If element.EntityType = 7 Then
                     If Err Then GoTo 5
                     If element.HasAttributes = True Then
                           ArrayAttributes = element.GetAttributes
                           For k = LBound(ArrayAttributes) To UBound(ArrayAttributes)
                               If ArrayAttributes(k).TagString = "DATE" Then ArrayAttributes(k).TextString = VBA.UCase(VBA.Format(VBA.Date, "Mmm yyyy"))
                               If ArrayAttributes(k).TagString = "R" Then ArrayAttributes(k).TextString = revtest
                               If ArrayAttributes(k).TagString = "A" Then ArrayAttributes(k).TextString = revtest
                               If ArrayAttributes(k).TagString = "DESCRIPTION" Then ArrayAttributes(k).TextString = "REVISION IN PROGRESS"
                               If ArrayAttributes(k).TagString = "DWG-NO." Then
                               OldDWGNO = ArrayAttributes(k).TextString
                               NewDWGNO = Replace(OldDWGNO, CURREV, NEWREV)
                               ArrayAttributes(k).TextString = NewDWGNO
                               ThisDrawing.ActiveLayout.Name = NewDWGNO
                               End If
                           Next k
                     End If
5
                   End If
               Next
10
         Next j
RenameXrefBlockAttribs
       Next i
End Function



Function RenameXrefBlockAttribs()
Dim AttribValues, XrefOld, XrefNew, XrefPathOld, XrefPathNew, ListXref, TEST As String
Dim CURREV, NEWREV, CURREVPATH, NEWREVPATH As String
Dim element As AcadBlockReference
       CURREV = "_" & UserFormcombined.CurrentStageREV & "_"
       NEWREV = "_" & UserFormcombined.NewStageREV & "_"
       CURREVPATH = "\" & UserFormcombined.CurrentStageREV & "\"
       NEWREVPATH = "\" & UserFormcombined.NewStageREV & "\"
On Error Resume Next
       ListXref = "" 'Create a list of xrefs to avoid repeating - for some reason it lists each element more than once
       For Each element In ThisDrawing.ModelSpace
         If element.EntityType = 42 Then 'Test if it is an xref
            ' ListXref = ListXref & ", " & element.Name
            ' GoTo 10
               'If LCase(Left(element.Name, 2)) = "xr" Then
'                  MsgBox element.Name
                   If InStr(0, ListXref, element.Name) > 0 Then
                     If Err = 5 Then Err = 0: GoTo 5
                     GoTo 10 'check if xref in list
                   End If
5
                   ListXref = ListXref & ", " & element.Name
                   XrefOld = element.Name
                   XrefNew = Replace(XrefOld, CURREV, NEWREV)
                  ''''' XrefNew = InputBox("Rename Xref from " & XrefOld & " to:", "Rename Xref", XrefNew)
                   If XrefNew = "" Then GoTo 10 'cancel pressed
                   XrefPathOld = element.Path
                   XrefPathNew = Replace(XrefPathOld, XrefOld, XrefNew)
                   XrefPathNew = Replace(XrefPathNew, CURREVPATH, NEWREVPATH)
                  ''''' XrefPathNew = InputBox("Rename XrefPath from " & XrefPathOld & " to:", "Rename XrefPath", XrefPathNew)
                   If XrefPathNew = "" Then GoTo 10 'cancel pressed
                   'check if new path file exists and rename if it doesn't - warn if still not present
                   If Dir(XrefPathNew) = "" Then
                     Name Replace(XrefPathNew, XrefNew, XrefOld) As XrefPathNew
                     If Dir(XrefPathNew) = "" Then
                           MsgBox "Could not find file in xref path."
                           GoTo 10
                     End If
                   End If
                   'rename xref
                   ThisDrawing.SendCommand VBA.Chr(27) & VBA.Chr(27) & "-rename" & VBA.vbCr & "b" & VBA.vbCr & XrefOld & VBA.vbCr & XrefNew & VBA.vbCr
                   'check if xref loaded and unload

                   'unload xref
                   ThisDrawing.SendCommand VBA.Chr(27) & VBA.Chr(27) & "-xref" & VBA.vbCr & "u" & VBA.vbCr & XrefNew & VBA.vbCr
                   'repath xref
                   ThisDrawing.SendCommand VBA.Chr(27) & VBA.Chr(27) & "-xref" & VBA.vbCr & "p" & VBA.vbCr & XrefNew & VBA.vbCr & XrefPathNew & VBA.vbCr
                   'if previously loaded then reload xref

                   ThisDrawing.SendCommand VBA.Chr(27) & VBA.Chr(27) & "-xref" & VBA.vbCr & "r" & VBA.vbCr & XrefNew & VBA.vbCr

               End If
10
         'End If
       Next
End Function
页: [1]
查看完整版本: 将Dwg集从DA转换为CC