<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: VBA Printing to PDF in VBA Forum</title>
    <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/10089899#M6301</link>
    <description>&lt;P&gt;';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;BR /&gt;Sub ManyAssyPartList_DrawingManySheet()&lt;/P&gt;&lt;P&gt;Application.ScreenUpdating = False&lt;BR /&gt;Dim WS As Worksheet&lt;BR /&gt;Set WS = ThisWorkbook.Sheets("MANYASSYPARTLIST")&lt;BR /&gt;WS.Visible = True&lt;/P&gt;&lt;P&gt;'Clear Old Data&lt;BR /&gt;WS.Range("A2:L1000").ClearContents&lt;/P&gt;&lt;P&gt;'Thisdrawing&lt;BR /&gt;Dim Thisdrawing As AcadDocument&lt;BR /&gt;Set Thisdrawing = KhoidongAutoCad()&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;'Select Obj by SelectOnScreen&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.ADD("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "INSERT"&lt;/P&gt;&lt;P&gt;Do&lt;BR /&gt;objSelectOnScreen.Clear&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;Call ManyAssyPartList_DrawingManySheet_Fun01(WS, objSelectOnScreen)&lt;BR /&gt;Loop While objSelectOnScreen.Count &amp;gt; 0&lt;/P&gt;&lt;P&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;'Sheets("MENU").Select&lt;BR /&gt;'WS.Visible = False&lt;BR /&gt;Application.ScreenUpdating = True&lt;BR /&gt;MsgBox "Finish"&lt;/P&gt;&lt;P&gt;End Sub&lt;BR /&gt;Function ManyAssyPartList_DrawingManySheet_Fun01(WS As Worksheet, objSelectOnScreen As AcadSelectionSet)&lt;/P&gt;&lt;P&gt;'Khai bao Blockname va tagname de lay S_No va Qty&lt;BR /&gt;Dim SizeBlockName As String&lt;BR /&gt;SizeBlockName = ThisWorkbook.Sheets("SETUP").Range("B14").Value&lt;BR /&gt;Dim BlockNameSNo As String: BlockNameSNo = "DRAWING_TITLE3"&lt;BR /&gt;Dim TagNameSNo As String: TagNameSNo = "S_NO"&lt;BR /&gt;Dim BlockNameQty As String: BlockNameQty = "DRAWING_TITLE5"&lt;BR /&gt;Dim TagNameQty As String: TagNameQty = "QUAN"&lt;BR /&gt;Dim TagNameMat As String: TagNameMat = "MATERIAL"&lt;BR /&gt;Dim SNoValue As String&lt;BR /&gt;Dim QtyValue As String&lt;BR /&gt;Dim StrMaterial As String&lt;/P&gt;&lt;P&gt;If objSelectOnScreen.Count = 0 Then&lt;BR /&gt;MsgBox "No Selected Block"&lt;BR /&gt;Exit Function&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;Dim EachBlockRef As AcadBlockReference&lt;BR /&gt;Dim EachBlockname As String&lt;BR /&gt;Dim PartListBlockRefArr() As Variant&lt;BR /&gt;Dim i As Integer&lt;/P&gt;&lt;P&gt;'Creat PartListArr&lt;BR /&gt;For Each EachBlockRef In objSelectOnScreen&lt;BR /&gt;EachBlockname = EachBlockRef.Name&lt;BR /&gt;Select Case EachBlockname&lt;BR /&gt;Case BlockNameSNo&lt;BR /&gt;SNoValue = Func03GetAttValue(EachBlockRef, TagNameSNo)&lt;BR /&gt;SNoValue = "-" &amp;amp; Left(SNoValue, 4)&lt;BR /&gt;Case BlockNameQty&lt;BR /&gt;QtyValue = Func03GetAttValue(EachBlockRef, TagNameQty)&lt;BR /&gt;Case SizeBlockName&lt;BR /&gt;StrMaterial = Func03GetAttValue(EachBlockRef, TagNameMat)&lt;BR /&gt;If Left(StrMaterial, 1) = "-" Then&lt;BR /&gt;ReDim Preserve PartListBlockRefArr(0 To i)&lt;BR /&gt;Set PartListBlockRefArr(i) = EachBlockRef&lt;BR /&gt;i = i + 1&lt;BR /&gt;End If&lt;BR /&gt;End Select&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;'Creat WriteData&lt;BR /&gt;Dim WriteData() As String&lt;BR /&gt;Dim varAttributes As Variant&lt;BR /&gt;ReDim WriteData(0 To UBound(PartListBlockRefArr), 0 To 11)&lt;BR /&gt;For i = LBound(WriteData) To UBound(WriteData)&lt;BR /&gt;Set EachBlockRef = PartListBlockRefArr(i)&lt;BR /&gt;varAttributes = EachBlockRef.GetAttributes&lt;BR /&gt;WriteData(i, 0) = SNoValue&lt;BR /&gt;WriteData(i, 1) = QtyValue&lt;BR /&gt;For k = LBound(varAttributes) To UBound(varAttributes)&lt;BR /&gt;WriteData(i, k + 2) = varAttributes(k).TextString&lt;BR /&gt;Next&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;'Write Data to Excel&lt;BR /&gt;Dim EndRow As Integer&lt;BR /&gt;EndRow = WS.Cells(Rows.Count, 1).End(xlUp).Row + 1&lt;BR /&gt;Dim RowNo As Integer&lt;BR /&gt;Dim ColumnNo As Integer&lt;BR /&gt;For i = LBound(WriteData) To UBound(WriteData)&lt;BR /&gt;RowNo = EndRow + i&lt;BR /&gt;For k = 0 To 11&lt;BR /&gt;ColumnNo = k + 1&lt;BR /&gt;WS.Cells(RowNo, ColumnNo).Value = WriteData(i, k)&lt;BR /&gt;Next&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;End Function&lt;/P&gt;</description>
    <pubDate>Wed, 17 Feb 2021 13:08:03 GMT</pubDate>
    <dc:creator>buianhtuan.cdt</dc:creator>
    <dc:date>2021-02-17T13:08:03Z</dc:date>
    <item>
      <title>VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8349492#M6290</link>
      <description>&lt;P&gt;Hello everyone,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I can't manage to set any print configurations, everytime I open a drawing it resets to what is default in the drawing. The problem occurs with some drawings exported from another program (cadmatic... ) and trying to print to PDF.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;---- edit&amp;nbsp; -----&lt;/P&gt;&lt;P&gt;Now I am loading a few preset plot configurations from another drawing, which seems to be working. Only I would like to use the button 'Apply to layout'. Does anyone know if this is possible thourhg VBA?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;Function DoPdf(dwg As AcadDocument, pdfFile As String, config As String) As Boolean
    
    ' Initialize the acad plot, configs and configurations
    Dim ptObj As AcadPlot
    Dim ptConfigs As AcadPlotConfigurations
    Dim plotConfig As AcadPlotConfiguration

    ' Create a new plot configuration with all needed parameters
    Set ptObj = dwg.Plot
    Set ptConfigs = dwg.PlotConfigurations
    
    ' Add a plotconfiguration
    ThisDrawing.SendCommand "filedia" &amp;amp; vbCr &amp;amp; "0" &amp;amp; vbCr
    ThisDrawing.SendCommand ".-psetupin" &amp;amp; vbCr &amp;amp; "PATH" &amp;amp; vbCr &amp;amp; "*" &amp;amp; vbCr &amp;amp; vbCr &amp;amp; vbCr
    ThisDrawing.SendCommand "filedia" &amp;amp; vbCr &amp;amp; "1" &amp;amp; vbCr
    
    ' Set the configuration
    Select Case config
        Case "a3"
            Set plotConfig = ptConfigs.Item("Spools_a3")
        Case "a2"
            Set plotConfig = ptConfigs.Item("Spools_a2")
        Case "a1"
            Set plotConfig = ptConfigs.Item("Spools_a1")
    End Select
    
    ' Set background plotting to off so autocad will wait till print is finished. Prevents errors.
    Call ThisDrawing.SetVariable("BACKGROUNDPLOT", 0)
    
    ' Updates the plot
    plotConfig.RefreshPlotDeviceInfo

    ' Create a variable to see if print was succesfull
    Dim success As Boolean
    
    ' Catch the error
    On Error Resume Next
        success = ptObj.PlotToFile(pdfFile, plotConfig.ConfigName)
    If Err Then
        'MsgBox "Not printed"
    End If
        
    ' Delete the previous config
    Set plotConfig = Nothing

    ' Return the result
    DoPdf = success
    
End Function&lt;/PRE&gt;</description>
      <pubDate>Mon, 22 Oct 2018 08:41:44 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8349492#M6290</guid>
      <dc:creator>basnederveen</dc:creator>
      <dc:date>2018-10-22T08:41:44Z</dc:date>
    </item>
    <item>
      <title>Re: VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8349606#M6291</link>
      <description>&lt;P&gt;&lt;SPAN class=""&gt;&lt;SPAN&gt;Yes, it is possible.&lt;/SPAN&gt;&lt;BR /&gt;I don't have the code at hand right now, but it works.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 22 Oct 2018 09:08:53 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8349606#M6291</guid>
      <dc:creator>maratovich</dc:creator>
      <dc:date>2018-10-22T09:08:53Z</dc:date>
    </item>
    <item>
      <title>Re: VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8349828#M6292</link>
      <description>&lt;P&gt;It's just the apply to layout I need. The rest is working now.&lt;/P&gt;</description>
      <pubDate>Mon, 22 Oct 2018 10:56:57 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8349828#M6292</guid>
      <dc:creator>basnederveen</dc:creator>
      <dc:date>2018-10-22T10:56:57Z</dc:date>
    </item>
    <item>
      <title>Re: VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8353957#M6293</link>
      <description>&lt;P&gt;Use your plotconfig to set the ActiveLayout.ConfigName property.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ActiveLayout.ConfigName = myPlotConfig.Name&lt;/P&gt;</description>
      <pubDate>Tue, 23 Oct 2018 18:07:25 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8353957#M6293</guid>
      <dc:creator>Ed__Jobe</dc:creator>
      <dc:date>2018-10-23T18:07:25Z</dc:date>
    </item>
    <item>
      <title>Re: VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8355806#M6294</link>
      <description>&lt;PRE&gt;Sub TEST()

    ' Initialize the acad plot, configs and configurations
    Dim ptObj As AcadPlot
    Dim ptConfigs As AcadPlotConfigurations
    Dim plotConfig As AcadPlotConfiguration

    ' Create a new plot configuration with all needed parameters
    Set ptObj = ThisDrawing.Plot
    Set ptConfigs = ThisDrawing.PlotConfigurations

    ' Test
    Set plotConfig = ptConfigs.Item("Spools_a2")
    ThisDrawing.ActiveLayout.ConfigName = plotConfig.Name

End Sub&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;That does not work, but this is setting the Plot config, not the page setup. What I am doing manually is&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Set the printer/plotter -&amp;gt; dwg to pdf.pc3&lt;/P&gt;&lt;P&gt;- select a page setup&lt;/P&gt;&lt;P&gt;- apply to layout&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Page setup.JPG" style="width: 522px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/561346i7BCD12D2EA0098AD/image-size/large?v=v2&amp;amp;px=999" role="button" title="Page setup.JPG" alt="Page setup.JPG" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 24 Oct 2018 12:30:54 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8355806#M6294</guid>
      <dc:creator>basnederveen</dc:creator>
      <dc:date>2018-10-24T12:30:54Z</dc:date>
    </item>
    <item>
      <title>Re: VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8356214#M6295</link>
      <description>&lt;P&gt;Sorry, its been a few years since I worked with page setups. I was going from memory and its not what it used to be. &lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;First of all, plot configs &lt;EM&gt;are&lt;/EM&gt; page setups. To set a layout's page setup, use the CopyFrom method.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;objLayout.CopyFrom ThisDrawing.PlotConfigurations.Item("Spools_a2")&lt;/PRE&gt;</description>
      <pubDate>Wed, 24 Oct 2018 14:41:19 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8356214#M6295</guid>
      <dc:creator>Ed__Jobe</dc:creator>
      <dc:date>2018-10-24T14:41:19Z</dc:date>
    </item>
    <item>
      <title>Re: VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8356326#M6296</link>
      <description>&lt;P&gt;Thank you! That works when printing. It does not show the actual changed setup in the screen though, but it works when printing. So fine for me &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks again!!&lt;/P&gt;</description>
      <pubDate>Wed, 24 Oct 2018 15:14:47 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/8356326#M6296</guid>
      <dc:creator>basnederveen</dc:creator>
      <dc:date>2018-10-24T15:14:47Z</dc:date>
    </item>
    <item>
      <title>Re: VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/9992928#M6297</link>
      <description>&lt;P&gt;Sub TH0202AutomaticPrint()&lt;/P&gt;&lt;P&gt;'Chon doi tuong bang select on screen&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;/P&gt;&lt;P&gt;Dim FT(3) As Integer&lt;BR /&gt;Dim FD(3) As Variant&lt;BR /&gt;FT(0) = -4: FD(0) = "&amp;lt;AND"&lt;BR /&gt;FT(1) = 0: FD(1) = "LWPolyline"&lt;BR /&gt;FT(2) = 8: FD(2) = "04_HIDDEN"&lt;BR /&gt;FT(3) = -4: FD(3) = "AND&amp;gt;"&lt;/P&gt;&lt;P&gt;objSelectOnScreen.Select acSelectionSetAll, , , FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then Exit Sub&lt;/P&gt;&lt;P&gt;Dim ThisPlot As AcadPlot&lt;BR /&gt;Set ThisPlot = Thisdrawing.Plot&lt;/P&gt;&lt;P&gt;Dim temp As Variant&lt;BR /&gt;'Set so to can in&lt;BR /&gt;ThisPlot.NumberOfCopies = 1&lt;BR /&gt;ThisPlot.QuietErrorMode = True&lt;BR /&gt;Dim Thislayout As AcadLayout&lt;BR /&gt;Set Thislayout = Thisdrawing.ActiveLayout&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Thislayout.ConfigName = "Adobe PDF.pc3" 'Plot device&lt;BR /&gt;Thislayout.CanonicalMediaName = "A3" 'Paper Size&lt;BR /&gt;Thislayout.CenterPlot = True 'Center the plot&lt;BR /&gt;Thislayout.StandardScale = acScaleToFit 'Scale to fit&lt;BR /&gt;Thislayout.PaperUnits = acMillimeters 'Paper unit is mm&lt;BR /&gt;Thislayout.PlotHidden = False 'N/A&lt;BR /&gt;Thislayout.PlotRotation = ac90degrees 'in nam ngang&lt;/P&gt;&lt;P&gt;Thislayout.StyleSheet = "monochrome.ctb" 'Plot style&lt;BR /&gt;Thislayout.PlotWithLineweights = True&lt;BR /&gt;Thislayout.PlotWithPlotStyles = True&lt;BR /&gt;&lt;BR /&gt;Dim EachobjSelectOnScreen As AcadEntity&lt;BR /&gt;Dim MinPoint, MaxPoint As Variant&lt;/P&gt;&lt;P&gt;For Each EachobjSelectOnScreen In objSelectOnScreen&lt;BR /&gt;EachobjSelectOnScreen.GetBoundingBox MinPoint, MaxPoint&lt;BR /&gt;'translate the points which are in World UCS to Display coordinates&lt;BR /&gt;MinPoint = Thisdrawing.Utility.TranslateCoordinates(MinPoint, acWorld, acDisplayDCS, False)&lt;BR /&gt;MaxPoint = Thisdrawing.Utility.TranslateCoordinates(MaxPoint, acWorld, acDisplayDCS, False)&lt;BR /&gt;ReDim Preserve MinPoint(0 To 1)&lt;BR /&gt;ReDim Preserve MaxPoint(0 To 1)&lt;BR /&gt;Thislayout.SetWindowToPlot MinPoint, MaxPoint&lt;BR /&gt;Thislayout.PlotType = acWindow 'Print by Window&lt;BR /&gt;ThisPlot.PlotToDevice&lt;BR /&gt;Next&lt;BR /&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;End Sub&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Function Func15ACopyFileFollowLArr(FilesList As Variant, CopyFileList As Variant, CopyToFolderPath As String, WS As Worksheet, RefColumn As Integer, RefEndRow As Integer) As Integer&lt;BR /&gt;'Kiem tra trong cac phan tu cua mang ListText, co phan tu nao nam trong SearchInText hay khong&lt;/P&gt;&lt;P&gt;Dim File As Variant&lt;BR /&gt;Dim NeedCopyFilename As String&lt;BR /&gt;Dim NeedCopyFullFilename As String&lt;BR /&gt;Dim FilePath As String&lt;BR /&gt;Dim CopyFilePath As String&lt;BR /&gt;Dim FileName As String&lt;BR /&gt;Dim CopiedFileCount As Integer&lt;/P&gt;&lt;P&gt;For i = LBound(CopyFileList) To UBound(CopyFileList)&lt;BR /&gt;NeedCopyFilename = CopyFileList(i)&lt;BR /&gt;CopyFilePath = ""&lt;BR /&gt;For Each File In FilesList&lt;BR /&gt;'Lay file name, dinh dang aaaaa-bbb&lt;BR /&gt;FilePath = File&lt;BR /&gt;FileName = Func05CreatFilenameFromPath(FilePath, "FileName")&lt;BR /&gt;'Kiem tra xem text filename co trong NeedCopyFilename hay khong&lt;BR /&gt;If InStr(FileName, NeedCopyFilename) &amp;lt;&amp;gt; 0 Then 'neu co file&lt;BR /&gt;If StrComp(FileName, NeedCopyFullFilename) &amp;gt;= 0 Then&lt;BR /&gt;CopyFilePath = FilePath&lt;BR /&gt;NeedCopyFullFilename = FileName&lt;BR /&gt;End If&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;If CopyFilePath &amp;lt;&amp;gt; "" Then&lt;BR /&gt;Call Func14CopyFileFromFilePathToFolder(CopyFilePath, NeedCopyFullFilename, CopyToFolderPath)&lt;BR /&gt;CopiedFileCount = CopiedFileCount + 1&lt;BR /&gt;'Viet &amp;#141;Ï vao excel&lt;BR /&gt;For k = 3 To RefEndRow&lt;BR /&gt;If WS.Cells(k, RefColumn).Value = NeedCopyFilename Then&lt;BR /&gt;WS.Cells(k, RefColumn).Value = NeedCopyFullFilename&lt;BR /&gt;WS.Cells(k, RefColumn + 1).Value = "&amp;#141;Ï"&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;Func15ACopyFileFollowLArr = CopiedFileCount&lt;BR /&gt;End Function&lt;/P&gt;</description>
      <pubDate>Mon, 11 Jan 2021 13:08:09 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/9992928#M6297</guid>
      <dc:creator>buianhtuan.cdt</dc:creator>
      <dc:date>2021-01-11T13:08:09Z</dc:date>
    </item>
    <item>
      <title>Re: VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/10007592#M6298</link>
      <description>&lt;P&gt;;(VBA AutoCad)Creat Centerline, shorcutkey [CCL]&lt;BR /&gt;(defun C:CCL()&lt;BR /&gt;(command "-vbarun" "TBR11CreatCenterLine")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Creat Phantom Line Throught 2 Point, shorcutkey [PL2P]&lt;BR /&gt;(defun C:PL2P()&lt;BR /&gt;(command "-vbarun" "TBR10PhantomLine2Point")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Increase, Decrease Length of Line, shorcutkey [LENDE]&lt;BR /&gt;(defun C:LENDE()&lt;BR /&gt;(command "-vbarun" "TBR09LengthDelta")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Convert Text to MText and BringToFront, shorcutkey [T2MT]&lt;BR /&gt;(defun C:T2MT()&lt;BR /&gt;(command "-vbarun" "TBR08ConvertText2MTextBringToFront")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Duplicate Obj, shorcutkey [DUP]&lt;BR /&gt;(defun C:DUP()&lt;BR /&gt;(command "-vbarun" "TBR07DuplicateObj")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Only select dimension, shorcutkey [SD]&lt;BR /&gt;(defun C:SD()&lt;BR /&gt;(command "-vbarun" "TBR03SelectDimension")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Only select Text and MText, shorcutkey [ST]&lt;BR /&gt;(defun C:ST()&lt;BR /&gt;(command "-vbarun" "TBR04SelectTextMText")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Only select Block, shorcutkey [SB]&lt;BR /&gt;(defun C:SB()&lt;BR /&gt;(command "-vbarun" "TBR05SelectBlock")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Select Obj By Layer, shorcutkey [SBL]&lt;BR /&gt;(defun C:SBL()&lt;BR /&gt;(command "-vbarun" "TBR06SelectByLayer")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad) Noi tam cac duong tron thang hang&lt;BR /&gt;(defun C:C2C()&lt;BR /&gt;(command "-vbarun" "TBR02ConnectCenter2Center")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)(Dimension),shorcutkey "DN"&lt;BR /&gt;(defun C:DN()&lt;BR /&gt;(command "-vbarun" "TBR01EditDimensionDongMoNgoac")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Quick Print to PDF&lt;BR /&gt;(defun C:QPRINT()&lt;BR /&gt;(command "-vbarun" "TH0202AutomaticPrint")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Creat Pitch Dimension (P***x***=****)&lt;BR /&gt;(defun C:CPD()&lt;BR /&gt;(command "-vbarun" "TH0201CreatPitchDimension")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;BR /&gt;Sub TH0201CreatPitchDimension()&lt;BR /&gt;'Creat Pitch Dimension (P***x***=****), shortcut key [CPD]&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Creat Pitch Dimension")&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;'Get Pitch and sum&lt;BR /&gt;Dim ObjPitchDim As AcadDimension&lt;BR /&gt;Dim ObjSumDim As AcadDimension&lt;BR /&gt;Dim Pitch As Double&lt;BR /&gt;Dim Sum As Double&lt;BR /&gt;Dim TmpQty As Double&lt;BR /&gt;Dim Qty As Integer&lt;BR /&gt;Dim TextOverride As String&lt;BR /&gt;Dim ObjArr As AcadDimension&lt;BR /&gt;Dim TmpObjArr As Variant&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Select Picth and Sum Dimension")&lt;BR /&gt;TmpObjArr = Func68SelectOnScreenByType("DIMENSION", "", "", "", "", 2)&lt;BR /&gt;If VarType(TmpObjArr) = vbEmpty Then&lt;BR /&gt;Exit Sub&lt;BR /&gt;Else&lt;BR /&gt;Set ObjPitchDim = TmpObjArr(0)&lt;BR /&gt;Set ObjSumDim = TmpObjArr(1)&lt;BR /&gt;Pitch = Func67GetDimensionMeasurement(ObjPitchDim)&lt;BR /&gt;Sum = Func67GetDimensionMeasurement(ObjSumDim)&lt;BR /&gt;If Pitch &amp;gt; Sum Then&lt;BR /&gt;Set ObjPitchDim = TmpObjArr(1)&lt;BR /&gt;Set ObjSumDim = TmpObjArr(0)&lt;BR /&gt;Pitch = Func67GetDimensionMeasurement(ObjPitchDim)&lt;BR /&gt;Sum = Func67GetDimensionMeasurement(ObjSumDim)&lt;BR /&gt;End If&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Define Qty&lt;BR /&gt;TmpQty = Sum / Pitch&lt;BR /&gt;Qty = Int(TmpQty)&lt;BR /&gt;If Qty = 1 Then&lt;BR /&gt;MsgBox "Px1???"&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;BR /&gt;If Qty = TmpQty Then&lt;BR /&gt;TextOverride = "P" &amp;amp; Pitch &amp;amp; "x" &amp;amp; Qty &amp;amp; "=" &amp;amp; "&amp;lt;&amp;gt;"&lt;BR /&gt;Call Func69ChangeDimensionProperty(ObjSumDim, TextOverride, "", "")&lt;BR /&gt;Else&lt;BR /&gt;MsgBox "P" &amp;amp; Pitch &amp;amp; "x" &amp;amp; Qty &amp;amp; "&amp;lt;&amp;gt;" &amp;amp; Sum&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;End Sub&lt;BR /&gt;Sub TBR01EditDimensionDongMoNgoac()&lt;BR /&gt;'Dong mo ngoac doi tuong kich thuoc, neu kich thuoc da dong mo ngoac thi xoa&lt;BR /&gt;'Shorcut "DN", dong ngoac&lt;/P&gt;&lt;P&gt;Dim DimTextOverride As String&lt;BR /&gt;Dim DimPrefix As String: DimPrefix = "("&lt;BR /&gt;Dim DimSuffix As String: DimSuffix = ")"&lt;BR /&gt;Dim OldPrefix As String&lt;BR /&gt;Dim OldTextOverride As String&lt;/P&gt;&lt;P&gt;'Chon doi tuong bang select on screen&lt;BR /&gt;Dim ObjDim As AcadDimension&lt;BR /&gt;Dim ObjDimName As String&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Dim EachobjSelectOnScreen As AcadDimension&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(2) As Integer&lt;BR /&gt;Dim FD(2) As Variant&lt;BR /&gt;FT(0) = -4: FD(0) = "&amp;lt;OR"&lt;BR /&gt;FT(1) = 0: FD(1) = "DIMENSION"&lt;BR /&gt;FT(2) = -4: FD(2) = "OR&amp;gt;"&lt;BR /&gt;Thisdrawing.Utility.Prompt vbCrLf &amp;amp; "Select Dimension to Edit:"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;MsgBox "Please select dimension"&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;BR /&gt;For Each EachobjSelectOnScreen In objSelectOnScreen&lt;BR /&gt;Set ObjDim = EachobjSelectOnScreen&lt;BR /&gt;OldTextOverride = ObjDim.TextOverride&lt;BR /&gt;OldPrefix = ObjDim.TextPrefix&lt;BR /&gt;Select Case ObjDim.ObjectName&lt;BR /&gt;Case "AcDbRadialDimension", "AcDbDiametricDimension"&lt;BR /&gt;If InStr(OldTextOverride, "(") &amp;lt;&amp;gt; 0 Then&lt;BR /&gt;DimTextOverride = ""&lt;BR /&gt;Else&lt;BR /&gt;DimTextOverride = "(&amp;lt;&amp;gt;)"&lt;BR /&gt;End If&lt;BR /&gt;ObjDim.TextOverride = DimTextOverride&lt;BR /&gt;Case Else&lt;BR /&gt;If InStr(OldPrefix, "(") &amp;lt;&amp;gt; 0 Then&lt;BR /&gt;ObjDim.TextPrefix = ""&lt;BR /&gt;ObjDim.TextSuffix = ""&lt;BR /&gt;Else&lt;BR /&gt;ObjDim.TextPrefix = DimPrefix&lt;BR /&gt;ObjDim.TextSuffix = DimSuffix&lt;BR /&gt;End If&lt;BR /&gt;End Select&lt;BR /&gt;ObjDim.Update&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;End Sub&lt;BR /&gt;Sub TBR02ConnectCenter2Center()&lt;BR /&gt;'Connent Circle to circle by centerline&lt;/P&gt;&lt;P&gt;'Select Circle by select on screen&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Dim EachobjSelectOnScreen As AcadCircle&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "CIRCLE"&lt;BR /&gt;Thisdrawing.Utility.Prompt vbCrLf &amp;amp; "Select Circle:"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;MsgBox "No Obj"&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;BR /&gt;Dim PointArr() As Variant&lt;BR /&gt;Dim CenterPoint As Variant&lt;BR /&gt;Dim CenterPointX As Double&lt;BR /&gt;Dim CenterPointY As Double&lt;BR /&gt;Dim TmpPoint As Variant&lt;BR /&gt;Dim TmpPointX As Double&lt;BR /&gt;Dim TmpPointY As Double&lt;BR /&gt;Dim k As Integer&lt;BR /&gt;Dim CheckHave As Boolean&lt;BR /&gt;ReDim PointArr(0)&lt;BR /&gt;For Each EachobjSelectOnScreen In objSelectOnScreen&lt;BR /&gt;CheckHave = False&lt;BR /&gt;CenterPoint = EachobjSelectOnScreen.Center&lt;BR /&gt;CenterPointX = CenterPoint(0)&lt;BR /&gt;CenterPointY = CenterPoint(1)&lt;BR /&gt;For i = LBound(PointArr) To UBound(PointArr)&lt;BR /&gt;TmpPoint = PointArr(i)&lt;BR /&gt;If VarType(TmpPoint) &amp;lt;&amp;gt; vbEmpty Then&lt;BR /&gt;TmpPointX = TmpPoint(0)&lt;BR /&gt;TmpPointY = TmpPoint(1)&lt;BR /&gt;If CenterPointX = TmpPointX And CenterPointY = TmpPointY Then CheckHave = True&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;If CheckHave = False Then&lt;BR /&gt;ReDim Preserve PointArr(O To k)&lt;BR /&gt;PointArr(k) = CenterPoint&lt;BR /&gt;k = k + 1&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;'Creat XYArray From PointArr&lt;BR /&gt;Dim XYArr As Variant&lt;BR /&gt;ReDim XYArr(0 To UBound(PointArr), 0 To 1)&lt;BR /&gt;For i = LBound(PointArr) To UBound(PointArr)&lt;BR /&gt;TmpPoint = PointArr(i)&lt;BR /&gt;XYArr(i, 0) = Round(TmpPoint(0), 2)&lt;BR /&gt;XYArr(i, 1) = Round(TmpPoint(1), 2)&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;'Creat XArr(XValue,Ymin,Ymax)&lt;BR /&gt;Dim TmpXArr() As Variant&lt;BR /&gt;Dim XArr() As Variant&lt;BR /&gt;Dim MinY As Double&lt;BR /&gt;Dim MaxY As Double&lt;BR /&gt;Dim TmpDouble As Double&lt;BR /&gt;TmpXArr = Func71CreatListFromArr(XYArr, 0)&lt;BR /&gt;ReDim XArr(0 To UBound(TmpXArr), 0 To 2)&lt;BR /&gt;For i = LBound(XArr) To UBound(XArr)&lt;BR /&gt;TmpDouble = TmpXArr(i)&lt;BR /&gt;MinY = Func72FindMinMaxFromXYArr(XYArr, TmpDouble, "YMIN")&lt;BR /&gt;MaxY = Func72FindMinMaxFromXYArr(XYArr, TmpDouble, "YMAX")&lt;BR /&gt;XArr(i, 0) = TmpDouble&lt;BR /&gt;XArr(i, 1) = MinY&lt;BR /&gt;XArr(i, 2) = MaxY&lt;BR /&gt;Call Func73DrawLineThrough2Point(TmpDouble, MinY, TmpDouble, MaxY, CenterLayerName)&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;'Creat YArr(YValue,Xmin,Xmax)&lt;BR /&gt;Dim TmpYArr() As Variant&lt;BR /&gt;Dim YArr() As Variant&lt;BR /&gt;Dim MinX As Double&lt;BR /&gt;Dim MaxX As Double&lt;BR /&gt;TmpYArr = Func71CreatListFromArr(XYArr, 1)&lt;BR /&gt;ReDim YArr(0 To UBound(TmpYArr), 0 To 2)&lt;BR /&gt;For i = LBound(YArr) To UBound(YArr)&lt;BR /&gt;TmpDouble = TmpYArr(i)&lt;BR /&gt;MinX = Func72FindMinMaxFromXYArr(XYArr, TmpDouble, "XMIN")&lt;BR /&gt;MaxX = Func72FindMinMaxFromXYArr(XYArr, TmpDouble, "XMAX")&lt;BR /&gt;YArr(i, 0) = TmpDouble&lt;BR /&gt;YArr(i, 1) = MinX&lt;BR /&gt;YArr(i, 2) = MaxX&lt;BR /&gt;Call Func73DrawLineThrough2Point(MinX, TmpDouble, MaxX, TmpDouble, CenterLayerName)&lt;BR /&gt;Next&lt;BR /&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;End Sub&lt;/P&gt;&lt;P&gt;Sub TBR03SelectDimension()&lt;BR /&gt;'(VBA AutoCad)Only select dimension, shorcutkey [SD]&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "DIMENSION"&lt;BR /&gt;'FT(0) = -4: FD(0) = "&amp;lt;OR"&lt;BR /&gt;'FT(1) = 0: FD(1) = ObjType1&lt;BR /&gt;'FT(2) = 0: FD(2) = ObjType2&lt;BR /&gt;'FT(3) = -4: FD(3) = "OR&amp;gt;"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;Thisdrawing.SendCommand "select" &amp;amp; vbCr &amp;amp; "P" &amp;amp; vbCr &amp;amp; vbCr&lt;BR /&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;End Sub&lt;/P&gt;&lt;P&gt;Sub TBR04SelectTextMText()&lt;BR /&gt;'(VBA AutoCad)Only select Text and MText, shorcutkey [ST]&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(3) As Integer&lt;BR /&gt;Dim FD(3) As Variant&lt;/P&gt;&lt;P&gt;FT(0) = -4: FD(0) = "&amp;lt;OR"&lt;BR /&gt;FT(1) = 0: FD(1) = "TEXT"&lt;BR /&gt;FT(2) = 0: FD(2) = "MTEXT"&lt;BR /&gt;FT(3) = -4: FD(3) = "OR&amp;gt;"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;Thisdrawing.SendCommand "select" &amp;amp; vbCr &amp;amp; "P" &amp;amp; vbCr &amp;amp; vbCr&lt;BR /&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;End Sub&lt;/P&gt;&lt;P&gt;Sub TBR05SelectBlock()&lt;BR /&gt;'(VBA AutoCad)Only select Block, shorcutkey [SB]&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "INSERT"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;Thisdrawing.SendCommand "select" &amp;amp; vbCr &amp;amp; "P" &amp;amp; vbCr &amp;amp; vbCr&lt;BR /&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;End Sub&lt;/P&gt;&lt;P&gt;Sub TBR06SelectByLayer()&lt;BR /&gt;'(VBA AutoCad)Select Obj By Layer, shorcutkey [SBL]&lt;/P&gt;&lt;P&gt;'Define layername from GetEntity&lt;BR /&gt;Dim LayerName As String&lt;BR /&gt;Dim varPick As Variant&lt;BR /&gt;Dim Msg As String: Msg = "Select Layer by Object:"&lt;BR /&gt;Dim objSelect As AcadEntity&lt;BR /&gt;Dim CountLoop As Integer&lt;BR /&gt;On Error Resume Next&lt;BR /&gt;Do While objSelect Is Nothing&lt;BR /&gt;If CountLoop = 3 Then Exit Sub&lt;BR /&gt;Thisdrawing.Utility.GetEntity objSelect, varPick, Msg&lt;BR /&gt;CountLoop = CountLoop + 1&lt;BR /&gt;Loop&lt;BR /&gt;LayerName = objSelect.layer&lt;BR /&gt;objSelect.Highlight True&lt;/P&gt;&lt;P&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 8: FD(0) = LayerName&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;objSelect.Highlight False&lt;BR /&gt;Thisdrawing.SendCommand "select" &amp;amp; vbCr &amp;amp; "P" &amp;amp; vbCr &amp;amp; vbCr&lt;BR /&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;End Sub&lt;/P&gt;&lt;P&gt;Sub TBR07DuplicateObj()&lt;BR /&gt;'(VBA AutoCad)Duplicate Obj, shorcutkey [DUP]&lt;/P&gt;&lt;P&gt;'Select any entity select on screen&lt;BR /&gt;Dim EntitySelect As AcadSelectionSet&lt;BR /&gt;Dim EachEntity As AcadEntity&lt;BR /&gt;Dim CopyEachEntity As AcadEntity&lt;BR /&gt;Set EntitySelect = Thisdrawing.SelectionSets.Add("EntitySelect" &amp;amp; Now)&lt;BR /&gt;EntitySelect.SelectOnScreen&lt;BR /&gt;If EntitySelect.count = 0 Then&lt;BR /&gt;EntitySelect.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;BR /&gt;For Each EachEntity In EntitySelect&lt;BR /&gt;Set CopyEachEntity = EachEntity.Copy&lt;BR /&gt;Next&lt;BR /&gt;EntitySelect.Delete&lt;/P&gt;&lt;P&gt;End Sub&lt;/P&gt;&lt;P&gt;Sub TBR08ConvertText2MTextBringToFront()&lt;BR /&gt;'(VBA AutoCad)Convert Text to MText and BringToFront, shorcutkey [T2MT]&lt;/P&gt;&lt;P&gt;'Select any entity select on screen&lt;BR /&gt;Dim EntitySelect As AcadSelectionSet&lt;BR /&gt;Dim EachEntity As AcadText&lt;BR /&gt;Dim EachMText As AcadMText&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "TEXT"&lt;BR /&gt;Set EntitySelect = Thisdrawing.SelectionSets.Add("EntitySelect" &amp;amp; Now)&lt;BR /&gt;EntitySelect.SelectOnScreen FT, FD&lt;BR /&gt;If EntitySelect.count = 0 Then&lt;BR /&gt;EntitySelect.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;BR /&gt;For Each EachEntity In EntitySelect&lt;BR /&gt;Set EachMText = Func74ConvertText2MText(EachEntity)&lt;BR /&gt;' EachMText.BackgroundFill = True&lt;BR /&gt;Call Func75DrawOrder(EachMText, "Front")&lt;BR /&gt;Next&lt;BR /&gt;EntitySelect.Delete&lt;/P&gt;&lt;P&gt;End Sub&lt;/P&gt;&lt;P&gt;Sub TBR09LengthDelta()&lt;BR /&gt;'(VBA AutoCad)Increase, Decrease Length of Line, shorcutkey [LENDE]&lt;/P&gt;&lt;P&gt;'Select any entity select on screen&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "LINE"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Get Delta&lt;BR /&gt;Dim Delta As Double&lt;BR /&gt;On Error GoTo ResumeNext&lt;BR /&gt;Delta = Thisdrawing.Utility.GetReal("Delta=")&lt;BR /&gt;ResumeNext:&lt;BR /&gt;If Delta = 0 Then&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;Dim OldLine As AcadLine&lt;BR /&gt;Dim OldStartPoint As Variant&lt;BR /&gt;Dim OldEndPoint As Variant&lt;BR /&gt;Dim Angle As Double&lt;BR /&gt;Dim NewLine As AcadLine&lt;BR /&gt;Dim NewStartPoint As Variant&lt;BR /&gt;Dim NewEndPoint As Variant&lt;BR /&gt;For Each OldLine In objSelectOnScreen&lt;BR /&gt;OldStartPoint = OldLine.StartPoint&lt;BR /&gt;OldEndPoint = OldLine.EndPoint&lt;BR /&gt;Angle = OldLine.Angle&lt;BR /&gt;'Creat Newline&lt;BR /&gt;NewStartPoint = Thisdrawing.Utility.PolarPoint(OldStartPoint, Angle, -Delta)&lt;BR /&gt;NewEndPoint = Thisdrawing.Utility.PolarPoint(OldEndPoint, Angle, Delta)&lt;BR /&gt;Set NewLine = Thisdrawing.ModelSpace.AddLine(NewStartPoint, NewEndPoint)&lt;BR /&gt;Call Func76MatchObj(OldLine, NewLine)&lt;BR /&gt;OldLine.Delete&lt;BR /&gt;Next&lt;BR /&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;End Sub&lt;BR /&gt;Sub TBR10PhantomLine2Point()&lt;BR /&gt;'(VBA AutoCad)Creat Phantom Line Throught 2 Point, shorcutkey [PL2P]&lt;/P&gt;&lt;P&gt;'Set UCS is world&lt;BR /&gt;Thisdrawing.SendCommand "UCS" &amp;amp; vbCr &amp;amp; "W" &amp;amp; vbCr&lt;/P&gt;&lt;P&gt;'Get StartPoint and EndPoint&lt;BR /&gt;Dim OldStartPoint As Variant&lt;BR /&gt;Dim OldEndPoint As Variant&lt;BR /&gt;Dim Angle As Double&lt;BR /&gt;On Error GoTo ExitSub&lt;BR /&gt;OldStartPoint = Thisdrawing.Utility.GetPoint(, "Start Point select")&lt;BR /&gt;OldEndPoint = Thisdrawing.Utility.GetPoint(OldStartPoint, "End Point select")&lt;BR /&gt;Angle = Func23AngleOfLineThrough2Point(OldStartPoint, OldEndPoint)&lt;/P&gt;&lt;P&gt;'Define Delta&lt;BR /&gt;Dim Delta As Double: Delta = -1&lt;/P&gt;&lt;P&gt;'Creat Newline&lt;BR /&gt;Dim NewLine As AcadLine&lt;BR /&gt;Dim NewStartPoint As Variant&lt;BR /&gt;Dim NewEndPoint As Variant&lt;BR /&gt;NewStartPoint = Thisdrawing.Utility.PolarPoint(OldStartPoint, Angle, -Delta)&lt;BR /&gt;NewEndPoint = Thisdrawing.Utility.PolarPoint(OldEndPoint, Angle, Delta)&lt;BR /&gt;Set NewLine = Thisdrawing.ModelSpace.AddLine(NewStartPoint, NewEndPoint)&lt;/P&gt;&lt;P&gt;'Set layer for NewLine&lt;BR /&gt;NewLine.layer = PhantomLayerName&lt;BR /&gt;Call Func43SetBylayer(NewLine)&lt;/P&gt;&lt;P&gt;ExitSub:&lt;BR /&gt;End Sub&lt;BR /&gt;Sub TBR11CreatCenterLine()&lt;BR /&gt;'(VBA AutoCad)Creat Centerline, shorcutkey [CCL]&lt;/P&gt;&lt;P&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Creat Centerline")&lt;BR /&gt;'Define pi&lt;BR /&gt;Dim pi As Double&lt;BR /&gt;pi = 4 * Atn(1)&lt;BR /&gt;'Define Delta=DIMSCALE*1.5&lt;BR /&gt;Dim Delta As Double&lt;BR /&gt;Dim Dimscale As Double&lt;BR /&gt;Dimscale = Thisdrawing.GetVariable("DIMSCALE")&lt;BR /&gt;Delta = 1.5 * Dimscale&lt;/P&gt;&lt;P&gt;'Get 2 lines&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Select 2 Lines")&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FTL(0) As Integer&lt;BR /&gt;Dim FDL(0) As Variant&lt;BR /&gt;FTL(0) = 0: FDL(0) = "LINE"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FTL, FDL&lt;BR /&gt;If objSelectOnScreen.count &amp;lt;&amp;gt; 2 Then&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;BR /&gt;Dim EachobjSelectOnScreen As AcadEntity&lt;BR /&gt;Dim LineArr(0 To 1) As AcadLine&lt;BR /&gt;Dim ObjLine0 As AcadLine&lt;BR /&gt;Dim Objline1 As AcadLine&lt;BR /&gt;Dim i As Integer&lt;BR /&gt;For Each EachobjSelectOnScreen In objSelectOnScreen&lt;BR /&gt;Set LineArr(i) = EachobjSelectOnScreen&lt;BR /&gt;i = i + 1&lt;BR /&gt;Next&lt;BR /&gt;Set ObjLine0 = LineArr(0)&lt;BR /&gt;Set Objline1 = LineArr(1)&lt;BR /&gt;objSelectOnScreen.Clear&lt;/P&gt;&lt;P&gt;'Select Circle or Arc&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Select Circles or Arcs")&lt;BR /&gt;Dim FT(3) As Integer&lt;BR /&gt;Dim FD(3) As Variant&lt;BR /&gt;FT(0) = -4: FD(0) = "&amp;lt;OR"&lt;BR /&gt;FT(1) = 0: FD(1) = "CIRCLE"&lt;BR /&gt;FT(2) = 0: FD(2) = "ARC"&lt;BR /&gt;FT(3) = -4: FD(3) = "OR&amp;gt;"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;BR /&gt;Dim ObjCircle As AcadCircle&lt;BR /&gt;Dim ObjArc As AcadArc&lt;BR /&gt;'Creat TmpLine&lt;BR /&gt;Dim TmpLine As AcadLine&lt;BR /&gt;Dim TmpPoint1 As Variant&lt;BR /&gt;Dim TmpPoint2 As Variant&lt;BR /&gt;Dim TmpAngle As Double&lt;BR /&gt;TmpAngle = ObjLine0.Angle + pi / 2&lt;BR /&gt;'Creat centerline&lt;BR /&gt;Dim CenterLine As AcadLine&lt;BR /&gt;Dim Point1 As Variant&lt;BR /&gt;Dim Point2 As Variant&lt;BR /&gt;'Extent Centerline with delta&lt;BR /&gt;Dim NewPoint1 As Variant&lt;BR /&gt;Dim NewPoint2 As Variant&lt;BR /&gt;For Each EachobjSelectOnScreen In objSelectOnScreen&lt;BR /&gt;Select Case EachobjSelectOnScreen.ObjectName&lt;BR /&gt;Case "AcDbCircle"&lt;BR /&gt;Set ObjCircle = EachobjSelectOnScreen&lt;BR /&gt;TmpPoint1 = ObjCircle.Center&lt;BR /&gt;Case "AcDbArc"&lt;BR /&gt;Set ObjArc = EachobjSelectOnScreen&lt;BR /&gt;TmpPoint1 = ObjArc.Center&lt;BR /&gt;End Select&lt;BR /&gt;TmpPoint2 = Thisdrawing.Utility.PolarPoint(TmpPoint1, TmpAngle, 1)&lt;BR /&gt;Set TmpLine = Thisdrawing.ModelSpace.AddLine(TmpPoint1, TmpPoint2)&lt;BR /&gt;'Creat centerline&lt;BR /&gt;Point1 = TmpLine.IntersectWith(ObjLine0, acExtendThisEntity)&lt;BR /&gt;Point2 = TmpLine.IntersectWith(Objline1, acExtendThisEntity)&lt;BR /&gt;TmpLine.Delete&lt;BR /&gt;'Extent Centerline with delta&lt;BR /&gt;NewPoint1 = Thisdrawing.Utility.PolarPoint(Point1, TmpAngle, -Delta)&lt;BR /&gt;NewPoint2 = Thisdrawing.Utility.PolarPoint(Point2, TmpAngle, Delta)&lt;BR /&gt;Set CenterLine = Thisdrawing.ModelSpace.AddLine(NewPoint1, NewPoint2)&lt;BR /&gt;'Set layer&lt;BR /&gt;CenterLine.layer = CenterLayerName&lt;BR /&gt;Call Func43SetBylayer(CenterLine)&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;End Sub&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;BR /&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;BR /&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;BR /&gt;Function Func67GetDimensionMeasurement(ObjDim As AcadDimension) As Double&lt;BR /&gt;'Get Measurement of Dimension&lt;/P&gt;&lt;P&gt;Dim DimMeasure As Double&lt;BR /&gt;Dim UnitPrecision As Integer&lt;BR /&gt;Dim L As Double&lt;BR /&gt;DimMeasure = ObjDim.Measurement&lt;BR /&gt;UnitPrecision = ObjDim.PrimaryUnitsPrecision&lt;BR /&gt;L = Round(DimMeasure, UnitPrecision)&lt;BR /&gt;Func67GetDimensionMeasurement = L&lt;BR /&gt;End Function&lt;BR /&gt;Function Func68SelectOnScreenByType(ObjType1 As String, ObjType2 As String, ObjType3 As String, ObjType4 As String, ObjType5 As String, Qty As Variant) As Variant&lt;/P&gt;&lt;P&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(6) As Integer&lt;BR /&gt;Dim FD(6) As Variant&lt;BR /&gt;FT(0) = -4: FD(0) = "&amp;lt;OR"&lt;BR /&gt;FT(1) = 0: FD(1) = ObjType1&lt;BR /&gt;FT(2) = 0: FD(2) = ObjType2&lt;BR /&gt;FT(3) = 0: FD(3) = ObjType3&lt;BR /&gt;FT(4) = 0: FD(4) = ObjType4&lt;BR /&gt;FT(5) = 0: FD(5) = ObjType5&lt;BR /&gt;FT(6) = -4: FD(6) = "OR&amp;gt;"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;MsgBox "No Select"&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Function&lt;BR /&gt;End If&lt;BR /&gt;If VarType(Qty) = vbInteger Then&lt;BR /&gt;If objSelectOnScreen.count &amp;lt;&amp;gt; Qty Then&lt;BR /&gt;MsgBox "Obj Qty &amp;lt;&amp;gt; " &amp;amp; Qty&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Function&lt;BR /&gt;End If&lt;BR /&gt;End If&lt;BR /&gt;Dim EachObj As AcadEntity&lt;BR /&gt;Dim ObjArr() As Variant&lt;BR /&gt;Dim i As Integer&lt;BR /&gt;For Each EachObj In objSelectOnScreen&lt;BR /&gt;ReDim Preserve ObjArr(0 To i)&lt;BR /&gt;Set ObjArr(i) = EachObj&lt;BR /&gt;i = i + 1&lt;BR /&gt;Next&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Func68SelectOnScreenByType = ObjArr&lt;BR /&gt;End Function&lt;BR /&gt;Function Func69ChangeDimensionProperty(DimObj As AcadDimension, TextOverride As String, DimPrefix As String, DimSuffix As String)&lt;BR /&gt;If TextOverride &amp;lt;&amp;gt; "" Then DimObj.TextOverride = TextOverride&lt;BR /&gt;If DimPrefix &amp;lt;&amp;gt; "" Then DimObj.TextPrefix = DimPrefix&lt;BR /&gt;If DimSuffix &amp;lt;&amp;gt; "" Then DimObj.TextSuffix = DimSuffix&lt;BR /&gt;DimObj.Update&lt;BR /&gt;End Function&lt;BR /&gt;Function Func70IsEmptyArray(anArray As Variant)&lt;/P&gt;&lt;P&gt;Dim i As Integer&lt;/P&gt;&lt;P&gt;On Error Resume Next&lt;BR /&gt;i = UBound(anArray, 1)&lt;BR /&gt;If Err.Number = 0 Then&lt;BR /&gt;Func70IsEmptyArray = False&lt;BR /&gt;Else&lt;BR /&gt;Func70IsEmptyArray = True&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;End Function&lt;BR /&gt;Function Func71CreatListFromArr(Arr As Variant, ColumnNumber As Integer) As Variant&lt;BR /&gt;'Function dung tao list cac doi tuong k trung nhau&lt;BR /&gt;If Func70IsEmptyArray(Arr) = True Then Exit Function&lt;/P&gt;&lt;P&gt;Dim TmpArr() As Variant&lt;BR /&gt;Dim TmpValue As Variant&lt;BR /&gt;Dim CheckHave As Boolean&lt;BR /&gt;Dim k As Integer&lt;BR /&gt;Dim j As Integer&lt;BR /&gt;ReDim TmpArr(0)&lt;BR /&gt;For i = LBound(Arr) To UBound(Arr)&lt;BR /&gt;TmpValue = Arr(i, ColumnNumber)&lt;BR /&gt;CheckHave = False&lt;BR /&gt;For k = LBound(TmpArr) To UBound(TmpArr)&lt;BR /&gt;If TmpValue = TmpArr(k) Then&lt;BR /&gt;CheckHave = True&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;If CheckHave = False Then&lt;BR /&gt;ReDim Preserve TmpArr(0 To j)&lt;BR /&gt;TmpArr(j) = TmpValue&lt;BR /&gt;j = j + 1&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;Func71CreatListFromArr = TmpArr&lt;BR /&gt;End Function&lt;BR /&gt;Function Func72FindMinMaxFromXYArr(XYArr As Variant, XYValue As Double, ValueType As String) As Double&lt;/P&gt;&lt;P&gt;If Func70IsEmptyArray(XYArr) = True Then Exit Function&lt;/P&gt;&lt;P&gt;'Define ValueColumn, MinMaxColumn&lt;BR /&gt;Dim MinMaxColumn As Integer&lt;BR /&gt;Dim ValueColumn As Integer&lt;BR /&gt;Select Case ValueType&lt;BR /&gt;Case "XMAX"&lt;BR /&gt;MinMaxColumn = 0&lt;BR /&gt;ValueColumn = 1&lt;BR /&gt;Case "XMIN"&lt;BR /&gt;MinMaxColumn = 0&lt;BR /&gt;ValueColumn = 1&lt;BR /&gt;Case "YMAX"&lt;BR /&gt;MinMaxColumn = 1&lt;BR /&gt;ValueColumn = 0&lt;BR /&gt;Case "YMIN"&lt;BR /&gt;MinMaxColumn = 1&lt;BR /&gt;ValueColumn = 0&lt;BR /&gt;End Select&lt;/P&gt;&lt;P&gt;Dim TmpValue As Double&lt;BR /&gt;Dim TmpMinMaxValue As Double&lt;BR /&gt;Dim MinValue As Double&lt;BR /&gt;Dim MaxValue As Double&lt;BR /&gt;'Define MinValue,MaxValue&lt;BR /&gt;For i = LBound(XYArr) To UBound(XYArr)&lt;BR /&gt;TmpValue = XYArr(i, ValueColumn)&lt;BR /&gt;TmpMinMaxValue = XYArr(i, MinMaxColumn)&lt;BR /&gt;If TmpValue = XYValue Then&lt;BR /&gt;MaxValue = TmpMinMaxValue&lt;BR /&gt;MinValue = TmpMinMaxValue&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;For i = LBound(XYArr) To UBound(XYArr)&lt;BR /&gt;TmpValue = XYArr(i, ValueColumn)&lt;BR /&gt;TmpMinMaxValue = XYArr(i, MinMaxColumn)&lt;BR /&gt;If TmpValue = XYValue Then&lt;BR /&gt;If TmpMinMaxValue &amp;gt;= MaxValue Then MaxValue = TmpMinMaxValue&lt;BR /&gt;If TmpMinMaxValue &amp;lt;= MinValue Then MinValue = TmpMinMaxValue&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;Select Case ValueType&lt;BR /&gt;Case "XMAX"&lt;BR /&gt;Func72FindMinMaxFromXYArr = MaxValue&lt;BR /&gt;Case "YMAX"&lt;BR /&gt;Func72FindMinMaxFromXYArr = MaxValue&lt;BR /&gt;Case "XMIN"&lt;BR /&gt;Func72FindMinMaxFromXYArr = MinValue&lt;BR /&gt;Case "YMIN"&lt;BR /&gt;Func72FindMinMaxFromXYArr = MinValue&lt;BR /&gt;End Select&lt;BR /&gt;End Function&lt;BR /&gt;Function Func73DrawLineThrough2Point(Point1X As Double, Point1Y As Double, Point2X As Double, Point2Y As Double, LayerName As String)&lt;/P&gt;&lt;P&gt;Dim Point1(0 To 2) As Double&lt;BR /&gt;Dim Point2(0 To 2) As Double&lt;BR /&gt;Point1(0) = Point1X&lt;BR /&gt;Point1(1) = Point1Y&lt;BR /&gt;Point2(0) = Point2X&lt;BR /&gt;Point2(1) = Point2Y&lt;BR /&gt;Dim Line As AcadLine&lt;BR /&gt;If Point1X = Point2X And Point1Y = Point2Y Then&lt;BR /&gt;Else&lt;BR /&gt;Set Line = Thisdrawing.ModelSpace.AddLine(Point1, Point2)&lt;BR /&gt;Line.layer = LayerName&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;End Function&lt;/P&gt;&lt;P&gt;Function Func74ConvertText2MText(ObjText As AcadText) As AcadMText&lt;BR /&gt;'Function Convert Text to MText&lt;/P&gt;&lt;P&gt;Dim ObjMText As AcadMText&lt;/P&gt;&lt;P&gt;'Get infomation from ObjText&lt;BR /&gt;Dim InsertPoint As Variant&lt;BR /&gt;Dim TextAlignment As AcAlignment&lt;BR /&gt;Dim TextString As String&lt;BR /&gt;InsertPoint = ObjText.InsertionPoint&lt;BR /&gt;TextString = ObjText.TextString&lt;BR /&gt;TextAlignment = ObjText.Alignment&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;'Define AttachmentPoint follow Alignment&lt;BR /&gt;Dim AttachmentPoint As AcAttachmentPoint&lt;BR /&gt;Select Case TextAlignment&lt;BR /&gt;Case acAlignmentBottomCenter, acAlignmentCenter&lt;BR /&gt;AttachmentPoint = acAttachmentPointBottomCenter&lt;BR /&gt;Case acAlignmentBottomLeft, acAlignmentLeft&lt;BR /&gt;AttachmentPoint = acAttachmentPointBottomLeft&lt;BR /&gt;Case acAlignmentBottomRight, acAlignmentRight&lt;BR /&gt;AttachmentPoint = acAttachmentPointBottomRight&lt;BR /&gt;Case acAlignmentMiddleCenter, acAlignmentMiddle&lt;BR /&gt;AttachmentPoint = acAttachmentPointMiddleCenter&lt;BR /&gt;Case acAlignmentMiddleLeft&lt;BR /&gt;AttachmentPoint = acAttachmentPointMiddleLeft&lt;BR /&gt;Case acAlignmentMiddleRight&lt;BR /&gt;AttachmentPoint = acAttachmentPointMiddleRight&lt;BR /&gt;Case acAlignmentTopCenter&lt;BR /&gt;AttachmentPoint = acAttachmentPointTopCenter&lt;BR /&gt;Case acAlignmentTopLeft&lt;BR /&gt;AttachmentPoint = acAttachmentPointTopLeft&lt;BR /&gt;Case acAlignmentTopRight&lt;BR /&gt;AttachmentPoint = acAttachmentPointTopRight&lt;BR /&gt;End Select&lt;/P&gt;&lt;P&gt;Set ObjMText = Thisdrawing.ModelSpace.AddMText(InsertPoint, 0, TextString)&lt;BR /&gt;ObjMText.layer = ObjText.layer&lt;BR /&gt;ObjMText.Height = ObjText.Height&lt;BR /&gt;Call Func43SetBylayer(ObjMText)&lt;BR /&gt;ObjMText.AttachmentPoint = AttachmentPoint&lt;BR /&gt;ObjMText.Rotation = ObjText.Rotation&lt;/P&gt;&lt;P&gt;'Move Text&lt;BR /&gt;Dim FromPoint As Variant&lt;BR /&gt;Dim ToPoint As Variant&lt;BR /&gt;FromPoint = Func19ObjectCenterPoint(ObjMText)&lt;BR /&gt;ToPoint = Func19ObjectCenterPoint(ObjText)&lt;BR /&gt;Call FuncMoveX(ObjMText, FromPoint, ToPoint)&lt;BR /&gt;Call FuncMoveY(ObjMText, FromPoint, ToPoint)&lt;/P&gt;&lt;P&gt;Set Func74ConvertText2MText = ObjMText&lt;BR /&gt;ObjText.Delete&lt;BR /&gt;End Function&lt;/P&gt;&lt;P&gt;Function Func75DrawOrder(Obj As AcadEntity, FrontBack As String)&lt;BR /&gt;'Bring Obj to Front, Send Obj to Back&lt;BR /&gt;Dim ObjHandle As String&lt;BR /&gt;Dim ObjHandent As String&lt;BR /&gt;ObjHandle = Obj.Handle&lt;BR /&gt;ObjHandent = "(handent " &amp;amp; Chr(34) &amp;amp; ObjHandle &amp;amp; Chr(34) &amp;amp; ")"&lt;BR /&gt;FrontBack = UCase(FrontBack)&lt;BR /&gt;Select Case FrontBack&lt;BR /&gt;Case "FRONT"&lt;BR /&gt;Thisdrawing.SendCommand "DRAWORDER" &amp;amp; vbCr &amp;amp; ObjHandent &amp;amp; vbCr &amp;amp; vbCr &amp;amp; "F" &amp;amp; vbCr&lt;BR /&gt;Case "BACK"&lt;BR /&gt;Thisdrawing.SendCommand "DRAWORDER" &amp;amp; vbCr &amp;amp; ObjHandent &amp;amp; vbCr &amp;amp; vbCr &amp;amp; "B" &amp;amp; vbCr&lt;BR /&gt;End Select&lt;/P&gt;&lt;P&gt;End Function&lt;/P&gt;&lt;P&gt;Function Func76MatchObj(OriginObj As AcadEntity, MatchObj As AcadEntity)&lt;BR /&gt;'Function Match: Color, layer, linetype, lineweight, linetypescale=1&lt;/P&gt;&lt;P&gt;MatchObj.Color = OriginObj.Color&lt;BR /&gt;MatchObj.layer = OriginObj.layer&lt;BR /&gt;MatchObj.Linetype = OriginObj.Linetype&lt;BR /&gt;MatchObj.Lineweight = acLnWtByLayer&lt;BR /&gt;MatchObj.LinetypeScale = 1&lt;/P&gt;&lt;P&gt;End Function&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 17 Jan 2021 12:34:51 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/10007592#M6298</guid>
      <dc:creator>buianhtuan.cdt</dc:creator>
      <dc:date>2021-01-17T12:34:51Z</dc:date>
    </item>
    <item>
      <title>Re: VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/10026445#M6299</link>
      <description>&lt;P&gt;;(VBA AutoCad)Ordinate Dimension Check Origin,[ODCO]&lt;BR /&gt;(defun C:ODCO()&lt;BR /&gt;(command "-vbarun" "TBR23OrdinateDimensionCheckOrigin")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Ordinate Dimension Copy,[ODC]&lt;BR /&gt;(defun C:ODC()&lt;BR /&gt;(command "-vbarun" "TBR22OrdinateDimensionCopy")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Ordinate Dimension Move,[ODM]&lt;BR /&gt;(defun C:ODM()&lt;BR /&gt;(command "-vbarun" "TBR21OrdinateDimensionMove")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Ordinate Dimension UCS,[ODUCS]&lt;BR /&gt;(defun C:ODUCS()&lt;BR /&gt;(command "-vbarun" "TBR20OridinateDimensionUCS")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Ordinate Dimension Straighten Manual,[ODSM]&lt;BR /&gt;(defun C:ODSM()&lt;BR /&gt;(command "-vbarun" "TBR19OrdinateDimensionStraightenManual")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;(VBA AutoCad)Ordinate Dimension Straighten,[ODS]&lt;BR /&gt;(defun C:ODS()&lt;BR /&gt;(command "-vbarun" "TBR18OrdinateDimensionStraighten")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;Ordinate Dimension Arrange,[ODA]&lt;BR /&gt;(defun C:ODA()&lt;BR /&gt;(command "-vbarun" "TBR17OrdinateDimensionArrange")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;Set Dimension Linear Scale,[SDLS]&lt;BR /&gt;(defun C:SDLS()&lt;BR /&gt;(command "-vbarun" "TBR16SetDimensionLinearScale")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;Rotate Finishing Sysbol,[ROFS]&lt;BR /&gt;(defun C:ROFS()&lt;BR /&gt;(command "-vbarun" "TBR15RotateFinishingSysbol")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;Change Entity in block to byLayer, [C2BL]&lt;BR /&gt;(defun C:C2BL()&lt;BR /&gt;(command "-vbarun" "TBR14Change2ByLayer")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;Change Entity in block to byBlock, [C2BB]&lt;BR /&gt;(defun C:C2BB()&lt;BR /&gt;(command "-vbarun" "TBR13Change2ByBlock")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;Creat Multi Centerline, shortcut key [MCL]&lt;BR /&gt;(defun C:MCL()&lt;BR /&gt;(command "-vbarun" "TBR12CreatMultiCenterline")&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;BR /&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;BR /&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;BR /&gt;Function Func77CircleABisConcentic(CircleA As AcadCircle, CircleB As AcadCircle) As Integer&lt;/P&gt;&lt;P&gt;Dim CenterA As Variant&lt;BR /&gt;Dim CenterB As Variant&lt;BR /&gt;Dim XA As Double&lt;BR /&gt;Dim YA As Double&lt;BR /&gt;Dim XB As Double&lt;BR /&gt;Dim YB As Double&lt;BR /&gt;CenterA = CircleA.Center&lt;BR /&gt;CenterB = CircleB.Center&lt;BR /&gt;XA = Round(CenterA(0), 2)&lt;BR /&gt;YA = Round(CenterA(1), 2)&lt;BR /&gt;XB = Round(CenterB(0), 2)&lt;BR /&gt;YB = Round(CenterB(1), 2)&lt;BR /&gt;If XA = XB And YA = YB Then&lt;BR /&gt;Func77CircleABisConcentic = 1&lt;BR /&gt;Else&lt;BR /&gt;Func77CircleABisConcentic = 0&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;End Function&lt;BR /&gt;Function Func78CircleCenterlineKKS(Object As AcadCircle)&lt;/P&gt;&lt;P&gt;Dim CircleCenter As Variant&lt;BR /&gt;Dim point1 As Variant&lt;BR /&gt;Dim point2 As Variant&lt;BR /&gt;Dim point3 As Variant&lt;BR /&gt;Dim point4 As Variant&lt;BR /&gt;Dim radius As Double&lt;BR /&gt;Dim Pi As Double&lt;BR /&gt;Pi = 4 * Atn(1)&lt;/P&gt;&lt;P&gt;CircleCenter = Object.Center&lt;BR /&gt;radius = Object.radius&lt;BR /&gt;radius = radius + 3&lt;BR /&gt;point1 = Thisdrawing.Utility.PolarPoint(CircleCenter, Pi, radius)&lt;BR /&gt;point2 = Thisdrawing.Utility.PolarPoint(CircleCenter, 0, radius)&lt;BR /&gt;point3 = Thisdrawing.Utility.PolarPoint(CircleCenter, Pi / 2, radius)&lt;BR /&gt;point4 = Thisdrawing.Utility.PolarPoint(CircleCenter, -Pi / 2, radius)&lt;/P&gt;&lt;P&gt;Dim Centerline1 As AcadLine&lt;BR /&gt;Dim Centerline2 As AcadLine&lt;BR /&gt;Set Centerline1 = Thisdrawing.ModelSpace.AddLine(point1, point2)&lt;BR /&gt;Set Centerline2 = Thisdrawing.ModelSpace.AddLine(point3, point4)&lt;BR /&gt;Centerline1.layer = CenterLayerName&lt;BR /&gt;Centerline2.layer = CenterLayerName&lt;/P&gt;&lt;P&gt;End Function&lt;BR /&gt;Function Func79PointAisEndPointOfLineB(PointA As Variant, LineB As AcadLine) As Boolean&lt;/P&gt;&lt;P&gt;Dim StartPoint As Variant&lt;BR /&gt;Dim EndPoint As Variant&lt;BR /&gt;StartPoint = LineB.StartPoint&lt;BR /&gt;EndPoint = LineB.EndPoint&lt;BR /&gt;Dim PointAx, PointAy As Double&lt;BR /&gt;Dim StartPointx, StartPointy As Double&lt;BR /&gt;Dim EndPointx, EndPointy As Double&lt;/P&gt;&lt;P&gt;PointAx = Round(PointA(0), 3)&lt;BR /&gt;PointAy = Round(PointA(1), 3)&lt;BR /&gt;StartPointx = Round(StartPoint(0), 3)&lt;BR /&gt;StartPointy = Round(StartPoint(1), 3)&lt;BR /&gt;EndPointx = Round(EndPoint(0), 3)&lt;BR /&gt;EndPointy = Round(EndPoint(1), 3)&lt;/P&gt;&lt;P&gt;If PointAx = StartPointx And PointAy = StartPointy Then Func79PointAisEndPointOfLineB = True&lt;BR /&gt;If PointAx = EndPointx And PointAy = EndPointy Then Func79PointAisEndPointOfLineB = True&lt;/P&gt;&lt;P&gt;End Function&lt;BR /&gt;Function FuncCadHome01MaxMinXYFrom2Point(PointA As Variant, PointB As Variant) As Variant&lt;BR /&gt;'Function Define MinX,MaxX,MinY,MaxY from MinPoint,MaxPoint&lt;BR /&gt;Dim XYArr(0 To 3) As Variant&lt;BR /&gt;Dim MinX As Double&lt;BR /&gt;Dim MaxX As Double&lt;BR /&gt;Dim MinY As Double&lt;BR /&gt;Dim MaxY As Double&lt;BR /&gt;Dim TmpDouble As Double&lt;BR /&gt;MinX = PointA(0)&lt;BR /&gt;MinY = PointA(1)&lt;BR /&gt;MaxX = PointB(0)&lt;BR /&gt;MaxY = PointB(1)&lt;BR /&gt;If MaxX &amp;lt; MinX Then&lt;BR /&gt;TmpDouble = MaxX&lt;BR /&gt;MaxX = MinX&lt;BR /&gt;MinX = TmpDouble&lt;BR /&gt;End If&lt;BR /&gt;If MaxY &amp;lt; MinY Then&lt;BR /&gt;TmpDouble = MaxY&lt;BR /&gt;MaxY = MinY&lt;BR /&gt;MinY = TmpDouble&lt;BR /&gt;End If&lt;BR /&gt;XYArr(0) = MinX&lt;BR /&gt;XYArr(1) = MaxX&lt;BR /&gt;XYArr(2) = MinY&lt;BR /&gt;XYArr(3) = MaxY&lt;BR /&gt;FuncCadHome01MaxMinXYFrom2Point = XYArr&lt;/P&gt;&lt;P&gt;End Function&lt;/P&gt;&lt;P&gt;Function FuncCadHome03OrdinateDimDirection(OridinateDimObj As AcadDimOrdinate, MinMaxArr As Variant) As String&lt;BR /&gt;'Function xac nhan vi tri cua Ordinate Dim so voi MinPoint va MaxPoint&lt;BR /&gt;Dim DimDirection As String&lt;BR /&gt;Dim MinX As Double&lt;BR /&gt;Dim MaxX As Double&lt;BR /&gt;Dim MinY As Double&lt;BR /&gt;Dim MaxY As Double&lt;BR /&gt;MinX = MinMaxArr(0)&lt;BR /&gt;MaxX = MinMaxArr(1)&lt;BR /&gt;MinY = MinMaxArr(2)&lt;BR /&gt;MaxY = MinMaxArr(3)&lt;BR /&gt;Dim TextPoint As Variant&lt;BR /&gt;Dim TextPointX As Double&lt;BR /&gt;Dim TextPointY As Double&lt;BR /&gt;TextPoint = OridinateDimObj.TextPosition&lt;BR /&gt;TextPointX = TextPoint(0)&lt;BR /&gt;TextPointY = TextPoint(1)&lt;BR /&gt;Dim DeltaMinX As Double&lt;BR /&gt;Dim DeltaMaxX As Double&lt;BR /&gt;Dim DeltaMinY As Double&lt;BR /&gt;Dim DeltaMaxY As Double&lt;BR /&gt;DeltaMinX = TextPointX - MinX&lt;BR /&gt;DeltaMaxX = TextPointX - MaxX&lt;BR /&gt;DeltaMinY = TextPointY - MinY&lt;BR /&gt;DeltaMaxY = TextPointY - MaxY&lt;/P&gt;&lt;P&gt;'Define Direction Up&lt;BR /&gt;If MinX &amp;gt; TextPointX And MinY &amp;lt;= TextPointY And TextPointY &amp;lt;= MaxY Then&lt;BR /&gt;DimDirection = "LEFT"&lt;BR /&gt;End If&lt;BR /&gt;If MaxX &amp;lt; TextPointX And MinY &amp;lt;= TextPointY And TextPointY &amp;lt;= MaxY Then&lt;BR /&gt;DimDirection = "RIGHT"&lt;BR /&gt;End If&lt;BR /&gt;If MinX &amp;lt;= TextPointX And TextPointX &amp;lt;= MaxX And MinY &amp;lt;= TextPointY And TextPointY &amp;lt;= MaxY Then&lt;BR /&gt;DimDirection = "IN"&lt;BR /&gt;End If&lt;BR /&gt;If DeltaMaxY &amp;gt;= 0 Then&lt;BR /&gt;Select Case TextPointX&lt;BR /&gt;Case Is &amp;lt; MinX&lt;BR /&gt;If Abs(DeltaMaxY) &amp;gt;= Abs(DeltaMinX) Then&lt;BR /&gt;DimDirection = "UP"&lt;BR /&gt;Else&lt;BR /&gt;DimDirection = "LEFT"&lt;BR /&gt;End If&lt;BR /&gt;Case Is &amp;gt; MaxX&lt;BR /&gt;If Abs(DeltaMaxY) &amp;gt;= Abs(DeltaMaxX) Then&lt;BR /&gt;DimDirection = "UP"&lt;BR /&gt;Else&lt;BR /&gt;DimDirection = "RIGHT"&lt;BR /&gt;End If&lt;BR /&gt;Case Else&lt;BR /&gt;DimDirection = "UP"&lt;BR /&gt;End Select&lt;BR /&gt;End If&lt;BR /&gt;If DeltaMinY &amp;lt;= 0 Then&lt;BR /&gt;Select Case TextPointX&lt;BR /&gt;Case Is &amp;lt; MinX&lt;BR /&gt;If Abs(DeltaMinY) &amp;gt;= Abs(DeltaMinX) Then&lt;BR /&gt;DimDirection = "DOWN"&lt;BR /&gt;Else&lt;BR /&gt;DimDirection = "LEFT"&lt;BR /&gt;End If&lt;BR /&gt;Case Is &amp;gt; MaxX&lt;BR /&gt;If Abs(DeltaMinY) &amp;gt;= Abs(DeltaMaxX) Then&lt;BR /&gt;DimDirection = "DOWN"&lt;BR /&gt;Else&lt;BR /&gt;DimDirection = "RIGHT"&lt;BR /&gt;End If&lt;BR /&gt;Case Else&lt;BR /&gt;DimDirection = "DOWN"&lt;BR /&gt;End Select&lt;BR /&gt;End If&lt;BR /&gt;FuncCadHome03OrdinateDimDirection = DimDirection&lt;BR /&gt;End Function&lt;BR /&gt;Function FuncCadHome04DefineDeltaDistanceFromDirection(DimDirection As String) As Variant&lt;BR /&gt;Dim Delta(0 To 1) As Integer&lt;BR /&gt;Dim DeltaX As Integer&lt;BR /&gt;Dim DeltaY As Integer&lt;BR /&gt;Select Case DimDirection&lt;BR /&gt;Case "IN"&lt;BR /&gt;DeltaX = 0&lt;BR /&gt;DeltaY = 0&lt;BR /&gt;Case "UP"&lt;BR /&gt;DeltaX = 0&lt;BR /&gt;DeltaY = 1&lt;BR /&gt;Case "DOWN"&lt;BR /&gt;DeltaX = 0&lt;BR /&gt;DeltaY = -1&lt;BR /&gt;Case "LEFT"&lt;BR /&gt;DeltaX = -1&lt;BR /&gt;DeltaY = 0&lt;BR /&gt;Case "RIGHT"&lt;BR /&gt;DeltaX = 1&lt;BR /&gt;DeltaY = 0&lt;BR /&gt;End Select&lt;BR /&gt;Delta(0) = DeltaX&lt;BR /&gt;Delta(1) = DeltaY&lt;BR /&gt;FuncCadHome04DefineDeltaDistanceFromDirection = Delta&lt;BR /&gt;End Function&lt;BR /&gt;Sub FuncCadHome05SetUCSFromPoint(origin As Variant)&lt;BR /&gt;Dim Pi As Double: Pi = 4 * Atn(1)&lt;/P&gt;&lt;P&gt;Dim ucsObj As AcadUCS&lt;BR /&gt;Dim xAxisPnt As Variant&lt;BR /&gt;Dim yAxisPnt As Variant&lt;/P&gt;&lt;P&gt;xAxisPnt = Thisdrawing.Utility.PolarPoint(origin, 0, 10)&lt;BR /&gt;yAxisPnt = Thisdrawing.Utility.PolarPoint(origin, Pi / 2 + LineAngle, 10)&lt;BR /&gt;&lt;BR /&gt;' Add the UCS to the UserCoordinatesSystems collection&lt;BR /&gt;Set ucsObj = Thisdrawing.UserCoordinateSystems.Add(origin, xAxisPnt, yAxisPnt, "New_UCS")&lt;BR /&gt;&lt;BR /&gt;' Display the UCS icon&lt;BR /&gt;Thisdrawing.ActiveViewport.UCSIconAtOrigin = True&lt;BR /&gt;Thisdrawing.ActiveViewport.UCSIconOn = True&lt;BR /&gt;&lt;BR /&gt;' Make the new UCS the active UCS&lt;BR /&gt;Thisdrawing.ActiveUCS = ucsObj&lt;/P&gt;&lt;P&gt;End Sub&lt;BR /&gt;Function FuncCadHome06MoveOrdinateDimension(objSelect As AcadDimOrdinate, PointA As Variant, MinPoint As Variant, MaxPoint As Variant, OldDelete As Boolean)&lt;/P&gt;&lt;P&gt;'Define MinX,MaxX,MinY,MaxY from MinPoint,MaxPoint&lt;BR /&gt;Dim MinXMaxXMinYMaxY As Variant&lt;BR /&gt;MinXMaxXMinYMaxY = FuncCadHome01MaxMinXYFrom2Point(MinPoint, MaxPoint)&lt;/P&gt;&lt;P&gt;'Define Dim Direction From 2Point&lt;BR /&gt;Dim DimDirection As String&lt;BR /&gt;DimDirection = FuncCadHome03OrdinateDimDirection(objSelect, MinXMaxXMinYMaxY)&lt;/P&gt;&lt;P&gt;'Define NewTexPositon&lt;BR /&gt;Dim OldTextPosition As Variant&lt;BR /&gt;Dim OldTextPositionX As Double&lt;BR /&gt;Dim OldTextPositionY As Double&lt;BR /&gt;Dim NewTextPosition(0 To 2) As Double&lt;BR /&gt;OldTextPosition = objSelect.TextPosition&lt;BR /&gt;OldTextPositionX = OldTextPosition(0)&lt;BR /&gt;OldTextPositionY = OldTextPosition(1)&lt;BR /&gt;Select Case DimDirection&lt;BR /&gt;Case "LEFT", "RIGHT"&lt;BR /&gt;NewTextPosition(0) = OldTextPositionX&lt;BR /&gt;NewTextPosition(1) = PointA(1)&lt;BR /&gt;Case "UP", "DOWN"&lt;BR /&gt;NewTextPosition(0) = PointA(0)&lt;BR /&gt;NewTextPosition(1) = OldTextPositionY&lt;BR /&gt;Case Else&lt;BR /&gt;MsgBox "In Limited"&lt;BR /&gt;Exit Function&lt;BR /&gt;End Select&lt;/P&gt;&lt;P&gt;'Creat New Ordinata Dimension&lt;BR /&gt;'Set DimOrdinateObject = Object.AddDimOrdinate(DefinitionPoint, _ LeaderEndPoint, UseXAxis)&lt;BR /&gt;Dim NewOD As AcadDimOrdinate&lt;BR /&gt;Dim DefinitionPoint As Variant&lt;BR /&gt;Dim LeaderEndPoint As Variant&lt;BR /&gt;Dim UseXAxis As Boolean&lt;BR /&gt;DefinitionPoint = Thisdrawing.Utility.TranslateCoordinates(PointA, acWorld, acUCS, 0)&lt;BR /&gt;LeaderEndPoint = Thisdrawing.Utility.TranslateCoordinates(OldTextPosition, acWorld, acUCS, 0)&lt;/P&gt;&lt;P&gt;Select Case DimDirection&lt;BR /&gt;Case "LEFT", "RIGHT"&lt;BR /&gt;UseXAxis = False&lt;BR /&gt;Case "UP", "DOWN"&lt;BR /&gt;UseXAxis = True&lt;BR /&gt;Case Else&lt;BR /&gt;MsgBox "In Limited"&lt;BR /&gt;Exit Function&lt;BR /&gt;End Select&lt;BR /&gt;Set NewOD = Thisdrawing.ModelSpace.AddDimOrdinate(DefinitionPoint, LeaderEndPoint, UseXAxis)&lt;/P&gt;&lt;P&gt;'Move Dim Text&lt;BR /&gt;Dim NewODTextPosition As Variant&lt;BR /&gt;Dim Point000(0 To 2) As Double&lt;BR /&gt;NewODTextPosition = Thisdrawing.Utility.TranslateCoordinates(NewTextPosition, acWorld, acUCS, 0)&lt;BR /&gt;NewOD.TextPosition = NewODTextPosition&lt;BR /&gt;NewOD.VerticalTextPosition = acVertCentered&lt;BR /&gt;objSelect.Update&lt;BR /&gt;NewOD.Move Point000, MinPoint&lt;/P&gt;&lt;P&gt;'Set layer for New OD&lt;BR /&gt;NewOD.layer = DimLayerName&lt;BR /&gt;Call Func43SetBylayer(NewOD)&lt;/P&gt;&lt;P&gt;'Delete Old OD&lt;BR /&gt;If OldDelete = True Then objSelect.Delete&lt;/P&gt;&lt;P&gt;End Function&lt;BR /&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;BR /&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;BR /&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;BR /&gt;Sub TBR12CreatMultiCenterline()&lt;BR /&gt;'Creat Multi Centerline, shortcut key [MCL]&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Creat Multi Centerline")&lt;/P&gt;&lt;P&gt;'Select Circle&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Select Circles to creat centerline")&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;'FT(0) = -4: FD(0) = "&amp;lt;OR"&lt;BR /&gt;'FT(1) = 0: FD(1) = "CIRCLE"&lt;BR /&gt;'FT(2) = 0: FD(2) = "ARC"&lt;BR /&gt;'FT(3) = -4: FD(3) = "OR&amp;gt;"&lt;BR /&gt;FT(0) = 0: FD(0) = "CIRCLE"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;MsgBox "No Selected Circle"&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Creat Circle Arr&lt;BR /&gt;Dim EachobjSelectOnScreen As AcadCircle&lt;BR /&gt;Dim CircleArr() As AcadCircle&lt;BR /&gt;Dim ObjCircle As AcadCircle&lt;BR /&gt;Dim TmpCircle As AcadCircle&lt;BR /&gt;Dim k As Integer&lt;BR /&gt;Dim IsConcentic As Integer&lt;BR /&gt;Dim TmpConcentic As Integer&lt;/P&gt;&lt;P&gt;For Each EachobjSelectOnScreen In objSelectOnScreen&lt;BR /&gt;IsConcentic = 0&lt;BR /&gt;Set ObjCircle = EachobjSelectOnScreen&lt;BR /&gt;If Func70IsEmptyArray(CircleArr) = False Then&lt;BR /&gt;For i = LBound(CircleArr) To UBound(CircleArr)&lt;BR /&gt;Set TmpCircle = CircleArr(i)&lt;BR /&gt;TmpConcentic = Func77CircleABisConcentic(ObjCircle, TmpCircle)&lt;BR /&gt;If TmpConcentic = 1 And ObjCircle.radius &amp;gt; TmpCircle.radius Then&lt;BR /&gt;Set CircleArr(i) = ObjCircle&lt;BR /&gt;End If&lt;BR /&gt;IsConcentic = IsConcentic + TmpConcentic&lt;BR /&gt;Next&lt;BR /&gt;End If&lt;BR /&gt;If IsConcentic = 0 Then&lt;BR /&gt;ReDim Preserve CircleArr(O To k)&lt;BR /&gt;Set CircleArr(k) = ObjCircle&lt;BR /&gt;k = k + 1&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;For i = LBound(CircleArr) To UBound(CircleArr)&lt;BR /&gt;Set ObjCircle = CircleArr(i)&lt;BR /&gt;Call Func78CircleCenterlineKKS(ObjCircle)&lt;BR /&gt;Next&lt;BR /&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;End Sub&lt;BR /&gt;Sub TBR13Change2ByBlock()&lt;BR /&gt;'Change Entity in block to byBlock, [C2BB]&lt;/P&gt;&lt;P&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "INSERT"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;MsgBox "No Selected Block"&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Change entity color to byblock&lt;BR /&gt;Dim EachBlockReference As AcadBlockReference&lt;BR /&gt;Dim EachBlock As AcadBlock&lt;BR /&gt;Dim EachEntity As AcadEntity&lt;BR /&gt;For Each EachobjSelectOnScreen In objSelectOnScreen&lt;BR /&gt;Set EachBlockReference = EachobjSelectOnScreen&lt;BR /&gt;Set EachBlock = Thisdrawing.Blocks(EachBlockReference.Name)&lt;BR /&gt;For Each EachEntity In EachBlock&lt;BR /&gt;EachEntity.Color = acByBlock&lt;BR /&gt;Next&lt;BR /&gt;EachBlockReference.Color = acRed&lt;BR /&gt;Next&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Thisdrawing.Regen (acActiveViewport)&lt;/P&gt;&lt;P&gt;End Sub&lt;/P&gt;&lt;P&gt;Sub TBR14Change2ByLayer()&lt;BR /&gt;'Change Entity in block to byLayer, [C2BL]&lt;/P&gt;&lt;P&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "INSERT"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;MsgBox "No Selected Block"&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Change entity color to byblock&lt;BR /&gt;Dim EachBlockReference As AcadBlockReference&lt;BR /&gt;Dim EachBlock As AcadBlock&lt;BR /&gt;Dim EachEntity As AcadEntity&lt;BR /&gt;For Each EachobjSelectOnScreen In objSelectOnScreen&lt;BR /&gt;Set EachBlockReference = EachobjSelectOnScreen&lt;BR /&gt;Set EachBlock = Thisdrawing.Blocks(EachBlockReference.Name)&lt;BR /&gt;For Each EachEntity In EachBlock&lt;BR /&gt;EachEntity.Color = acByLayer&lt;BR /&gt;Next&lt;BR /&gt;EachBlockReference.Color = acByLayer&lt;BR /&gt;EachBlockReference.layer = NormalLayerName&lt;BR /&gt;Next&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Thisdrawing.Regen (acActiveViewport)&lt;/P&gt;&lt;P&gt;End Sub&lt;BR /&gt;Sub TBR15RotateFinishingSysbol()&lt;BR /&gt;'Rotate Finishing Sysbol,[ROFS]&lt;/P&gt;&lt;P&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Rotate Finishing Sysbol")&lt;BR /&gt;'Set UCS is world&lt;BR /&gt;Thisdrawing.SendCommand "UCS" &amp;amp; vbCr &amp;amp; "W" &amp;amp; vbCr&lt;BR /&gt;Dim Pi As Double&lt;BR /&gt;Pi = 4 * Atn(1)&lt;/P&gt;&lt;P&gt;'Select Finishing Sysbol(Text,MText,Line)(LayerText)&lt;BR /&gt;Dim FinishingLayer As String: FinishingLayer = TextLayerName&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Select Finishing Sysbol")&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(7) As Integer&lt;BR /&gt;Dim FD(7) As Variant&lt;BR /&gt;FT(0) = -4: FD(0) = "&amp;lt;AND"&lt;BR /&gt;FT(1) = -4: FD(1) = "&amp;lt;OR"&lt;BR /&gt;FT(2) = 0: FD(2) = "TEXT"&lt;BR /&gt;FT(3) = 0: FD(3) = "MTEXT"&lt;BR /&gt;FT(4) = 0: FD(4) = "LINE"&lt;BR /&gt;FT(5) = -4: FD(5) = "OR&amp;gt;"&lt;BR /&gt;FT(6) = 8: FD(6) = FinishingLayer&lt;BR /&gt;FT(7) = -4: FD(7) = "AND&amp;gt;"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;MsgBox "No Selected Entity"&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Get StartPoint and EndPoint&lt;BR /&gt;Dim StartPoint As Variant&lt;BR /&gt;Dim EndPoint As Variant&lt;BR /&gt;Dim Angle As Double&lt;BR /&gt;On Error GoTo ExitSub&lt;BR /&gt;StartPoint = Thisdrawing.Utility.GetPoint(, "Start Point select")&lt;BR /&gt;EndPoint = Thisdrawing.Utility.GetPoint(StartPoint, "End Point select")&lt;BR /&gt;Angle = Func23AngleOfLineThrough2Point(StartPoint, EndPoint)&lt;/P&gt;&lt;P&gt;'Define BeforeAngle of Finishing Sysbol&lt;BR /&gt;Dim EachEntity As AcadEntity&lt;BR /&gt;Dim FinishingAngleLine As AcadLine&lt;BR /&gt;Dim BeforeAnge As Double&lt;BR /&gt;Dim TmpLine As AcadLine&lt;BR /&gt;For Each EachEntity In objSelectOnScreen&lt;BR /&gt;If EachEntity.ObjectName = "AcDbLine" Then&lt;BR /&gt;Set TmpLine = EachEntity&lt;BR /&gt;If Func79PointAisEndPointOfLineB(StartPoint, TmpLine) = False Then&lt;BR /&gt;Set FinishingAngleLine = TmpLine&lt;BR /&gt;End If&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;BeforeAngle = FinishingAngleLine.Angle&lt;/P&gt;&lt;P&gt;'Define RotateAngle and Rotate&lt;BR /&gt;Dim RotateAngle As Double&lt;BR /&gt;RotateAngle = Angle - BeforeAngle&lt;BR /&gt;For Each EachEntity In objSelectOnScreen&lt;BR /&gt;EachEntity.Rotate StartPoint, RotateAngle&lt;BR /&gt;Next&lt;BR /&gt;ExitSub:&lt;BR /&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;End Sub&lt;BR /&gt;Sub TBR16SetDimensionLinearScale()&lt;BR /&gt;'Set Dimension Linear Scale,[SDLS]&lt;/P&gt;&lt;P&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Set Dimension Linear Scale")&lt;/P&gt;&lt;P&gt;'Select Dimension&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Select Dimension to change Linear Scale")&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "DIMENSION"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;MsgBox "No Selected Entity"&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Get Linear Scale&lt;BR /&gt;Dim LinearScale As Double&lt;BR /&gt;On Error Resume Next&lt;BR /&gt;LinearScale = Thisdrawing.Utility.GetReal("New Linear Scale = ")&lt;BR /&gt;If Err Then&lt;BR /&gt;Err.Clear&lt;BR /&gt;MsgBox "No Dimension Linear Scale"&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Change Dim linear scale&lt;BR /&gt;Dim EachEntity As AcadDimension&lt;BR /&gt;For Each EachEntity In objSelectOnScreen&lt;BR /&gt;EachEntity.LinearScaleFactor = LinearScale&lt;BR /&gt;Next&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;MsgBox "Finished"&lt;/P&gt;&lt;P&gt;End Sub&lt;BR /&gt;Sub TBR17OrdinateDimensionArrange()&lt;BR /&gt;'Ordinate Dimension Arrange,[ODA]&lt;/P&gt;&lt;P&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Ordinate Dimension Arrange")&lt;/P&gt;&lt;P&gt;'Set UCS is world&lt;BR /&gt;Thisdrawing.SendCommand "UCS" &amp;amp; vbCr &amp;amp; "W" &amp;amp; vbCr&lt;/P&gt;&lt;P&gt;'Get Dimscale,Standart Distance&lt;BR /&gt;Dim Dimscale As Integer&lt;BR /&gt;Dimscale = Thisdrawing.GetVariable("DIMSCALE")&lt;BR /&gt;Dim Distance As Integer&lt;BR /&gt;Distance = 20 * Dimscale&lt;/P&gt;&lt;P&gt;'Select Dimension&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Select Dimension to arrange:")&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "DIMENSION"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;MsgBox "No Selected Entity. Exit"&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Get MinPoint and MaxPoint&lt;BR /&gt;Dim MinPoint As Variant&lt;BR /&gt;Dim MaxPoint As Variant&lt;BR /&gt;On Error GoTo Next01&lt;BR /&gt;MinPoint = Thisdrawing.Utility.GetPoint(, "Select MinPoint:")&lt;BR /&gt;MaxPoint = Thisdrawing.Utility.GetPoint(, "Select MaxPoint:")&lt;BR /&gt;Next01:&lt;BR /&gt;If Err.Number &amp;lt;&amp;gt; 0 Then&lt;BR /&gt;Err.Clear&lt;BR /&gt;MsgBox "Don't Select MinPoint or MaxPoint. Exit"&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Define MinX,MaxX,MinY,MaxY from MinPoint,MaxPoint&lt;BR /&gt;Dim MinXMaxXMinYMaxY As Variant&lt;BR /&gt;MinXMaxXMinYMaxY = FuncCadHome01MaxMinXYFrom2Point(MinPoint, MaxPoint)&lt;/P&gt;&lt;P&gt;'Filter Only Ordinate Dimension&lt;BR /&gt;Dim OrdinateDimArr() As Variant&lt;BR /&gt;Dim kArr As Integer&lt;BR /&gt;Dim EachEntity As AcadDimension&lt;BR /&gt;Dim EachOrdinateDim As AcadDimOrdinate&lt;BR /&gt;For Each EachEntity In objSelectOnScreen&lt;BR /&gt;If EachEntity.ObjectName = "AcDbOrdinateDimension" Then&lt;BR /&gt;ReDim Preserve OrdinateDimArr(0 To kArr)&lt;BR /&gt;Set OrdinateDimArr(kArr) = EachEntity&lt;BR /&gt;kArr = kArr + 1&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;Dim DimDirection As String&lt;BR /&gt;Dim Delta As Variant&lt;BR /&gt;Dim DeltaX As Integer&lt;BR /&gt;Dim DeltaY As Integer&lt;BR /&gt;Dim NewTextPosition(0 To 2) As Double&lt;BR /&gt;For i = LBound(OrdinateDimArr) To UBound(OrdinateDimArr)&lt;BR /&gt;Set EachOrdinateDim = OrdinateDimArr(i)&lt;BR /&gt;DimDirection = FuncCadHome03OrdinateDimDirection(EachOrdinateDim, MinXMaxXMinYMaxY)&lt;BR /&gt;Delta = FuncCadHome04DefineDeltaDistanceFromDirection(DimDirection)&lt;BR /&gt;DeltaX = Delta(0)&lt;BR /&gt;DeltaY = Delta(1)&lt;BR /&gt;Select Case DeltaX&lt;BR /&gt;Case -1&lt;BR /&gt;NewTextPosition(0) = MinXMaxXMinYMaxY(0) + DeltaX * Distance&lt;BR /&gt;Case 0&lt;BR /&gt;NewTextPosition(0) = EachOrdinateDim.TextPosition(0)&lt;BR /&gt;Case 1&lt;BR /&gt;NewTextPosition(0) = MinXMaxXMinYMaxY(1) + DeltaX * Distance&lt;BR /&gt;End Select&lt;BR /&gt;Select Case DeltaY&lt;BR /&gt;Case -1&lt;BR /&gt;NewTextPosition(1) = MinXMaxXMinYMaxY(2) + DeltaY * Distance&lt;BR /&gt;Case 0&lt;BR /&gt;NewTextPosition(1) = EachOrdinateDim.TextPosition(1)&lt;BR /&gt;Case 1&lt;BR /&gt;NewTextPosition(1) = MinXMaxXMinYMaxY(3) + DeltaY * Distance&lt;BR /&gt;End Select&lt;BR /&gt;EachOrdinateDim.TextPosition = NewTextPosition&lt;BR /&gt;EachOrdinateDim.Update&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;objSelectOnScreen.Delete&lt;BR /&gt;End Sub&lt;BR /&gt;Sub TBR18OrdinateDimensionStraighten()&lt;BR /&gt;'(VBA AutoCad)Ordinate Dimension Straighten,[ODS]&lt;/P&gt;&lt;P&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Ordinate Dimension Straighten")&lt;/P&gt;&lt;P&gt;'Select Dimension&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Select Ordinate Dimension to Straighten:")&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "DIMENSION"&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;MsgBox "No Selected Entity. Exit"&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Get MinPoint and MaxPoint&lt;BR /&gt;Dim MinPoint As Variant&lt;BR /&gt;Dim MaxPoint As Variant&lt;BR /&gt;'On Error GoTo Next01&lt;BR /&gt;MinPoint = Thisdrawing.Utility.GetPoint(, "Select MinPoint:")&lt;BR /&gt;MaxPoint = Thisdrawing.Utility.GetPoint(, "Select MaxPoint:")&lt;BR /&gt;'Next01:&lt;BR /&gt;'If Err.Number &amp;lt;&amp;gt; 0 Then&lt;BR /&gt;' Err.Clear&lt;BR /&gt;' MsgBox "Don't Select MinPoint or MaxPoint. Exit"&lt;BR /&gt;' objSelectOnScreen.Delete&lt;BR /&gt;' Exit Sub&lt;BR /&gt;'End If&lt;/P&gt;&lt;P&gt;'Set UCS to MinPoint&lt;BR /&gt;Call FuncCadHome05SetUCSFromPoint(MinPoint)&lt;/P&gt;&lt;P&gt;'Define MinX,MaxX,MinY,MaxY from MinPoint,MaxPoint&lt;BR /&gt;Dim MinXMaxXMinYMaxY As Variant&lt;BR /&gt;MinXMaxXMinYMaxY = FuncCadHome01MaxMinXYFrom2Point(MinPoint, MaxPoint)&lt;BR /&gt;'&lt;BR /&gt;'Filter Only Ordinate Dimension&lt;BR /&gt;Dim OrdinateDimArr() As Variant&lt;BR /&gt;Dim kArr As Integer&lt;BR /&gt;Dim EachEntity As AcadDimension&lt;BR /&gt;Dim EachOrdinateDim As AcadDimOrdinate&lt;BR /&gt;For Each EachEntity In objSelectOnScreen&lt;BR /&gt;If EachEntity.ObjectName = "AcDbOrdinateDimension" Then&lt;BR /&gt;ReDim Preserve OrdinateDimArr(0 To kArr)&lt;BR /&gt;Set OrdinateDimArr(kArr) = EachEntity&lt;BR /&gt;kArr = kArr + 1&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;Dim DimDirection As String&lt;BR /&gt;Dim ChangeCount As Integer&lt;BR /&gt;Dim DimMeasurement As Double&lt;BR /&gt;Dim OldTextPosition As Variant&lt;BR /&gt;Dim OldTextPositionX As Double&lt;BR /&gt;Dim OldTextPositionY As Double&lt;BR /&gt;Dim NewTextPosition(0 To 2) As Double&lt;BR /&gt;Dim WorldNewTextPositon As Variant&lt;BR /&gt;For i = LBound(OrdinateDimArr) To UBound(OrdinateDimArr)&lt;BR /&gt;Set EachOrdinateDim = OrdinateDimArr(i)&lt;BR /&gt;DimDirection = FuncCadHome03OrdinateDimDirection(EachOrdinateDim, MinXMaxXMinYMaxY)&lt;BR /&gt;OldTextPosition = EachOrdinateDim.TextPosition&lt;BR /&gt;OldTextPosition = Thisdrawing.Utility.TranslateCoordinates(OldTextPosition, acWorld, acUCS, 0)&lt;BR /&gt;OldTextPositionX = Round(OldTextPosition(0), 2)&lt;BR /&gt;OldTextPositionY = Round(OldTextPosition(1), 2)&lt;BR /&gt;DimMeasurement = Round(EachOrdinateDim.Measurement, 2)&lt;BR /&gt;Select Case DimDirection&lt;BR /&gt;Case "UP", "DOWN"&lt;BR /&gt;If DimMeasurement &amp;lt;&amp;gt; OldTextPositionX Then&lt;BR /&gt;NewTextPosition(0) = EachOrdinateDim.Measurement&lt;BR /&gt;NewTextPosition(1) = OldTextPosition(1)&lt;BR /&gt;WorldNewTextPositon = NewTextPosition&lt;BR /&gt;WorldNewTextPositon = Thisdrawing.Utility.TranslateCoordinates(WorldNewTextPositon, acUCS, acWorld, 0)&lt;BR /&gt;EachOrdinateDim.TextPosition = WorldNewTextPositon&lt;BR /&gt;EachOrdinateDim.Update&lt;BR /&gt;ChangeCount = ChangeCount + 1&lt;BR /&gt;End If&lt;BR /&gt;Case "LEFT", "RIGHT"&lt;BR /&gt;If DimMeasurement &amp;lt;&amp;gt; OldTextPositionY Then&lt;BR /&gt;NewTextPosition(1) = EachOrdinateDim.Measurement&lt;BR /&gt;NewTextPosition(0) = OldTextPosition(0)&lt;BR /&gt;WorldNewTextPositon = NewTextPosition&lt;BR /&gt;WorldNewTextPositon = Thisdrawing.Utility.TranslateCoordinates(WorldNewTextPositon, acUCS, acWorld, 0)&lt;BR /&gt;EachOrdinateDim.TextPosition = WorldNewTextPositon&lt;BR /&gt;EachOrdinateDim.Update&lt;BR /&gt;ChangeCount = ChangeCount + 1&lt;BR /&gt;End If&lt;BR /&gt;Case Else&lt;BR /&gt;End Select&lt;BR /&gt;Next&lt;BR /&gt;objSelectOnScreen.Delete&lt;BR /&gt;MsgBox "Change Text Position of " &amp;amp; ChangeCount &amp;amp; " Ordinate Dimension"&lt;BR /&gt;End Sub&lt;BR /&gt;Sub TBR19OrdinateDimensionStraightenManual()&lt;BR /&gt;'(VBA AutoCad)Ordinate Dimension Straighten Manual,[ODSM]&lt;/P&gt;&lt;P&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Ordinate Dimension Straighten Manual")&lt;/P&gt;&lt;P&gt;'Set UCS is world&lt;BR /&gt;Thisdrawing.SendCommand "UCS" &amp;amp; vbCr &amp;amp; "W" &amp;amp; vbCr&lt;BR /&gt;'Set ORTHO ON&lt;BR /&gt;Thisdrawing.SetVariable "ORTHOMODE", 1&lt;BR /&gt;Dim Pi As Double&lt;BR /&gt;Pi = 4 * Atn(1)&lt;/P&gt;&lt;P&gt;'Select Dimension&lt;BR /&gt;Dim varPick As Variant&lt;BR /&gt;Dim Msg As String: Msg = "Select Ordinate Dimension to Straighten Manual:"&lt;BR /&gt;Dim objSelect As AcadDimOrdinate&lt;BR /&gt;Dim CountLoop As Integer&lt;BR /&gt;On Error Resume Next&lt;BR /&gt;Do While objSelect Is Nothing&lt;BR /&gt;If CountLoop = 3 Then Exit Sub&lt;BR /&gt;Thisdrawing.Utility.GetEntity objSelect, varPick, Msg&lt;BR /&gt;CountLoop = CountLoop + 1&lt;BR /&gt;Loop&lt;/P&gt;&lt;P&gt;'Get PointA and PointB&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Select 2Point to Define dim direction")&lt;BR /&gt;Dim PointA As Variant&lt;BR /&gt;Dim PointB As Variant&lt;BR /&gt;On Error GoTo Next01&lt;BR /&gt;PointA = Thisdrawing.Utility.GetPoint(, "Select PointA:")&lt;BR /&gt;PointB = Thisdrawing.Utility.GetPoint(PointA, "Select PointB:")&lt;BR /&gt;Next01:&lt;BR /&gt;If Err.Number &amp;lt;&amp;gt; 0 Then&lt;BR /&gt;MsgBox "Don't Select PointA or PointB. Exit"&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Define Dim Direction From 2Point&lt;BR /&gt;Dim XorY As String&lt;/P&gt;&lt;P&gt;If Round(PointA(1), 2) = Round(PointB(1), 2) Then&lt;BR /&gt;XorY = "NamNgang"&lt;BR /&gt;Else&lt;BR /&gt;XorY = "ThangDung"&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Define NewTexPositon&lt;BR /&gt;Dim OldTextPosition As Variant&lt;BR /&gt;Dim OldTextPositionX As Double&lt;BR /&gt;Dim OldTextPositionY As Double&lt;BR /&gt;Dim NewTextPosition(0 To 2) As Double&lt;BR /&gt;OldTextPosition = objSelect.TextPosition&lt;BR /&gt;OldTextPositionX = OldTextPosition(0)&lt;BR /&gt;OldTextPositionY = OldTextPosition(1)&lt;BR /&gt;Select Case XorY&lt;BR /&gt;Case "NamNgang"&lt;BR /&gt;NewTextPosition(0) = OldTextPositionX&lt;BR /&gt;NewTextPosition(1) = PointA(1)&lt;BR /&gt;Case "ThangDung"&lt;BR /&gt;NewTextPosition(0) = PointA(0)&lt;BR /&gt;NewTextPosition(1) = OldTextPositionY&lt;BR /&gt;End Select&lt;/P&gt;&lt;P&gt;'Move Dim Text&lt;BR /&gt;objSelect.TextPosition = NewTextPosition&lt;BR /&gt;objSelect.Update&lt;/P&gt;&lt;P&gt;End Sub&lt;/P&gt;&lt;P&gt;Sub TBR20OridinateDimensionUCS()&lt;BR /&gt;'(VBA AutoCad)Ordinate Dimension UCS,[ODUCS]&lt;/P&gt;&lt;P&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Ordinate Dimension Set UCS")&lt;/P&gt;&lt;P&gt;'Get UCS Point&lt;BR /&gt;Dim UCSPoint As Variant&lt;BR /&gt;Dim MaxPoint As Variant&lt;BR /&gt;On Error GoTo ExitSub&lt;BR /&gt;UCSPoint = Thisdrawing.Utility.GetPoint(, "Select UCSPoint:")&lt;/P&gt;&lt;P&gt;'Set UCS to UCSPoint&lt;BR /&gt;Call FuncCadHome05SetUCSFromPoint(UCSPoint)&lt;/P&gt;&lt;P&gt;ExitSub:&lt;BR /&gt;End Sub&lt;BR /&gt;Sub TBR21OrdinateDimensionMove()&lt;BR /&gt;'(VBA AutoCad)Ordinate Dimension Move,[ODM]&lt;/P&gt;&lt;P&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Ordinate Dimension to Move")&lt;/P&gt;&lt;P&gt;'Get MinPoint and MaxPoint&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Select MinPoint and MaxPoint" &amp;amp; vbCrLf)&lt;BR /&gt;Dim MinPoint As Variant&lt;BR /&gt;Dim MaxPoint As Variant&lt;BR /&gt;On Error GoTo Next01&lt;BR /&gt;MinPoint = Thisdrawing.Utility.GetPoint(, "Select MinPoint:")&lt;BR /&gt;MaxPoint = Thisdrawing.Utility.GetPoint(, "Select MaxPoint:")&lt;BR /&gt;Next01:&lt;BR /&gt;If Err.Number &amp;lt;&amp;gt; 0 Then&lt;BR /&gt;MsgBox "Don't Select MinPoint or MaxPoint. Exit"&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Creat user UCS&lt;BR /&gt;Call FuncCadHome05SetUCSFromPoint(MinPoint)&lt;/P&gt;&lt;P&gt;'Select Dimension&lt;BR /&gt;'Get PointA&lt;BR /&gt;Dim varPick As Variant&lt;BR /&gt;Dim Msg As String: Msg = vbCrLf &amp;amp; "Select Ordinate Dimension to Move:"&lt;BR /&gt;Dim objSelect As AcadDimOrdinate&lt;BR /&gt;Dim PointA As Variant&lt;BR /&gt;On Error Resume Next&lt;BR /&gt;Do&lt;BR /&gt;Thisdrawing.Utility.GetEntity objSelect, varPick, Msg&lt;BR /&gt;PointA = Thisdrawing.Utility.GetPoint(, "Select Ordinate Dimension Point:")&lt;BR /&gt;If Err.Number = 0 Then&lt;BR /&gt;Call FuncCadHome06MoveOrdinateDimension(objSelect, PointA, MinPoint, MaxPoint, True)&lt;BR /&gt;End If&lt;BR /&gt;Loop While Err.Number = 0&lt;/P&gt;&lt;P&gt;End Sub&lt;BR /&gt;Sub TBR22OrdinateDimensionCopy()&lt;BR /&gt;'(VBA AutoCad)Ordinate Dimension Copy,[ODC]&lt;/P&gt;&lt;P&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Copy Ordinate Dimension")&lt;/P&gt;&lt;P&gt;'Get MinPoint and MaxPoint&lt;BR /&gt;Thisdrawing.Utility.Prompt (vbCrLf &amp;amp; "Select MinPoint and MaxPoint" &amp;amp; vbCrLf)&lt;BR /&gt;Dim MinPoint As Variant&lt;BR /&gt;Dim MaxPoint As Variant&lt;BR /&gt;On Error GoTo Next01&lt;BR /&gt;MinPoint = Thisdrawing.Utility.GetPoint(, "Select MinPoint:")&lt;BR /&gt;MaxPoint = Thisdrawing.Utility.GetPoint(, "Select MaxPoint:")&lt;BR /&gt;Next01:&lt;BR /&gt;If Err.Number &amp;lt;&amp;gt; 0 Then&lt;BR /&gt;MsgBox "Don't Select MinPoint or MaxPoint. Exit"&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;'Creat user UCS&lt;BR /&gt;Call FuncCadHome05SetUCSFromPoint(MinPoint)&lt;/P&gt;&lt;P&gt;'Select Dimension&lt;BR /&gt;'Get PointA&lt;BR /&gt;Dim varPick As Variant&lt;BR /&gt;Dim Msg As String: Msg = vbCrLf &amp;amp; "Select Ordinate Dimension To Copy:"&lt;BR /&gt;Dim objSelect As AcadDimOrdinate&lt;BR /&gt;On Error Resume Next&lt;BR /&gt;Thisdrawing.Utility.GetEntity objSelect, varPick, Msg&lt;BR /&gt;If Err.Number &amp;lt;&amp;gt; 0 Then&lt;BR /&gt;MsgBox "No Ordinate Dimension"&lt;BR /&gt;Exit Sub&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;Dim PointA As Variant&lt;BR /&gt;Do&lt;BR /&gt;PointA = Thisdrawing.Utility.GetPoint(, "Select Ordinate Dimension Point:")&lt;BR /&gt;If Err.Number = 0 Then&lt;BR /&gt;Call FuncCadHome06MoveOrdinateDimension(objSelect, PointA, MinPoint, MaxPoint, False)&lt;BR /&gt;End If&lt;BR /&gt;Loop While Err.Number = 0&lt;/P&gt;&lt;P&gt;End Sub&lt;BR /&gt;Sub TBR23OrdinateDimensionCheckOrigin()&lt;BR /&gt;'(VBA AutoCad)Ordinate Dimension Check Origin,[ODCO]&lt;/P&gt;&lt;P&gt;Dim Point00 As Variant&lt;BR /&gt;Dim Point00Arr() As Variant&lt;BR /&gt;Dim k As Integer&lt;BR /&gt;On Error Resume Next&lt;BR /&gt;Do&lt;BR /&gt;Point00 = Thisdrawing.Utility.GetPoint(, "Select Ordinate Point:")&lt;BR /&gt;If Err.Number = 0 Then&lt;BR /&gt;ReDim Preserve Point00Arr(0 To k)&lt;BR /&gt;Point00Arr(k) = Point00&lt;BR /&gt;k = k + 1&lt;BR /&gt;End If&lt;BR /&gt;Loop While Err.Number = 0&lt;BR /&gt;If Func70IsEmptyArray(Point00Arr) = True Then Exit Sub&lt;/P&gt;&lt;P&gt;Dim MinPoint As Variant&lt;BR /&gt;Dim MaxPoint As Variant&lt;BR /&gt;Dim Pi As Double: Pi = 4 * Atn(1)&lt;BR /&gt;For i = LBound(Point00Arr) To UBound(Point00Arr)&lt;BR /&gt;Point00 = Point00Arr(i)&lt;BR /&gt;MinPoint = Thisdrawing.Utility.PolarPoint(Point00, 5 * Pi / 4, 0.001)&lt;BR /&gt;MaxPoint = Thisdrawing.Utility.PolarPoint(Point00, Pi / 4, 0.001)&lt;BR /&gt;&lt;BR /&gt;'Select Dimension&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "DIMENSION"&lt;BR /&gt;objSelectOnScreen.Select acSelectionSetCrossing, MinPoint, MaxPoint, FT, FD&lt;BR /&gt;If objSelectOnScreen.count = 0 Then&lt;BR /&gt;MsgBox "No Selected Entity. Exit"&lt;BR /&gt;' objSelectOnScreen.Delete&lt;BR /&gt;' Exit Sub&lt;BR /&gt;End If&lt;BR /&gt;&lt;BR /&gt;Dim EachEntity As AcadDimension&lt;BR /&gt;For Each EachEntity In objSelectOnScreen&lt;BR /&gt;If EachEntity.ObjectName = "AcDbOrdinateDimension" Then&lt;BR /&gt;EachEntity.Visible = False&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;Next&lt;BR /&gt;objSelectOnScreen.Clear&lt;/P&gt;&lt;P&gt;'Check have Ordinate Dimension?&lt;BR /&gt;Dim WrongCount As Integer&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;objSelectOnScreen.Select acSelectionSetAll, , , FT, FD&lt;BR /&gt;For Each EachEntity In objSelectOnScreen&lt;BR /&gt;If EachEntity.ObjectName = "AcDbOrdinateDimension" And EachEntity.Visible = True Then&lt;BR /&gt;EachEntity.Color = acMagenta&lt;BR /&gt;WrongCount = WrongCount + 1&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;For Each EachEntity In objSelectOnScreen&lt;BR /&gt;EachEntity.Visible = True&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;MsgBox "Wrong Ordinate Dimension: " &amp;amp; WrongCount&lt;/P&gt;&lt;P&gt;End Sub&lt;/P&gt;</description>
      <pubDate>Sun, 24 Jan 2021 14:01:40 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/10026445#M6299</guid>
      <dc:creator>buianhtuan.cdt</dc:creator>
      <dc:date>2021-01-24T14:01:40Z</dc:date>
    </item>
    <item>
      <title>VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/10050741#M6300</link>
      <description>&lt;P&gt;Sub TBR0701CreatDataFromTable()&lt;/P&gt;&lt;P&gt;Dim WS As Worksheet&lt;BR /&gt;Set WS = Sheets("10.KKSMaterial")&lt;/P&gt;&lt;P&gt;'Xac dinh dong cuoi de ghi du lieu&lt;BR /&gt;Dim WriteEndRow As Integer&lt;BR /&gt;WriteEndRow = WS.Cells(Rows.Count, 3).End(xlUp).Row + 1&lt;/P&gt;&lt;P&gt;'Xac dinh dong dau tien va dong cuoi cung cua bang du lieu&lt;BR /&gt;Dim ReadTopRow As Integer&lt;BR /&gt;Dim ReadEndRow As Integer&lt;BR /&gt;ReadTopRow = 3&lt;BR /&gt;ReadEndRow = WS.Cells(Rows.Count, 11).End(xlUp).Row&lt;/P&gt;&lt;P&gt;'Xac dinh cot dau tien va cot cuoi cung cua bang du lieu&lt;BR /&gt;Dim ReadTopColumn As Integer&lt;BR /&gt;Dim ReadEndRColumn As Integer&lt;BR /&gt;ReadTopColumn = 12&lt;BR /&gt;ReadEndColumn = WS.Cells(1, Columns.Count).End(xlToLeft).Column&lt;/P&gt;&lt;P&gt;'Ghi du lieu&lt;BR /&gt;Dim YuuSenDo As String&lt;BR /&gt;Dim SizeType As String&lt;BR /&gt;Dim MatSize As String&lt;BR /&gt;Dim Mat As String&lt;BR /&gt;Dim MatType As String&lt;BR /&gt;Dim Note1 As String&lt;BR /&gt;Dim Note2 As String&lt;/P&gt;&lt;P&gt;MatType = WS.Range("J1").Value&lt;BR /&gt;Note1 = WS.Range("J2").Value&lt;BR /&gt;Note2 = WS.Range("J3").Value&lt;BR /&gt;For dong = ReadTopRow To ReadEndRow&lt;BR /&gt;Mat = WS.Cells(dong, ReadTopColumn - 1).Value&lt;BR /&gt;For Cot = ReadTopColumn To ReadEndColumn&lt;BR /&gt;YuuSenDo = WS.Cells(dong, Cot).Value&lt;BR /&gt;SizeType = WS.Cells(1, Cot).Value&lt;BR /&gt;MatSize = SizeType &amp;amp; WS.Cells(2, Cot).Value&lt;BR /&gt;If YuuSenDo &amp;lt;&amp;gt; "" Then&lt;BR /&gt;WS.Cells(WriteEndRow, 1).Value = YuuSenDo&lt;BR /&gt;WS.Cells(WriteEndRow, 2).Value = SizeType&lt;BR /&gt;WS.Cells(WriteEndRow, 3).Value = MatSize&lt;BR /&gt;WS.Cells(WriteEndRow, 4).Value = Mat&lt;BR /&gt;WS.Cells(WriteEndRow, 5).Value = MatType&lt;BR /&gt;WS.Cells(WriteEndRow, 6).Value = Note1&lt;BR /&gt;WS.Cells(WriteEndRow, 7).Value = Note2&lt;BR /&gt;WriteEndRow = WriteEndRow + 1&lt;BR /&gt;End If&lt;BR /&gt;Next&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;End Sub&lt;/P&gt;</description>
      <pubDate>Tue, 02 Feb 2021 13:48:44 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/10050741#M6300</guid>
      <dc:creator>buianhtuan.cdt</dc:creator>
      <dc:date>2021-02-02T13:48:44Z</dc:date>
    </item>
    <item>
      <title>Re: VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/10089899#M6301</link>
      <description>&lt;P&gt;';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;BR /&gt;Sub ManyAssyPartList_DrawingManySheet()&lt;/P&gt;&lt;P&gt;Application.ScreenUpdating = False&lt;BR /&gt;Dim WS As Worksheet&lt;BR /&gt;Set WS = ThisWorkbook.Sheets("MANYASSYPARTLIST")&lt;BR /&gt;WS.Visible = True&lt;/P&gt;&lt;P&gt;'Clear Old Data&lt;BR /&gt;WS.Range("A2:L1000").ClearContents&lt;/P&gt;&lt;P&gt;'Thisdrawing&lt;BR /&gt;Dim Thisdrawing As AcadDocument&lt;BR /&gt;Set Thisdrawing = KhoidongAutoCad()&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;'Select Obj by SelectOnScreen&lt;BR /&gt;Dim objSelectOnScreen As AcadSelectionSet&lt;BR /&gt;Set objSelectOnScreen = Thisdrawing.SelectionSets.ADD("objSelectOnScreen" &amp;amp; Now)&lt;BR /&gt;Dim FT(0) As Integer&lt;BR /&gt;Dim FD(0) As Variant&lt;BR /&gt;FT(0) = 0: FD(0) = "INSERT"&lt;/P&gt;&lt;P&gt;Do&lt;BR /&gt;objSelectOnScreen.Clear&lt;BR /&gt;objSelectOnScreen.SelectOnScreen FT, FD&lt;BR /&gt;Call ManyAssyPartList_DrawingManySheet_Fun01(WS, objSelectOnScreen)&lt;BR /&gt;Loop While objSelectOnScreen.Count &amp;gt; 0&lt;/P&gt;&lt;P&gt;objSelectOnScreen.Delete&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;'Sheets("MENU").Select&lt;BR /&gt;'WS.Visible = False&lt;BR /&gt;Application.ScreenUpdating = True&lt;BR /&gt;MsgBox "Finish"&lt;/P&gt;&lt;P&gt;End Sub&lt;BR /&gt;Function ManyAssyPartList_DrawingManySheet_Fun01(WS As Worksheet, objSelectOnScreen As AcadSelectionSet)&lt;/P&gt;&lt;P&gt;'Khai bao Blockname va tagname de lay S_No va Qty&lt;BR /&gt;Dim SizeBlockName As String&lt;BR /&gt;SizeBlockName = ThisWorkbook.Sheets("SETUP").Range("B14").Value&lt;BR /&gt;Dim BlockNameSNo As String: BlockNameSNo = "DRAWING_TITLE3"&lt;BR /&gt;Dim TagNameSNo As String: TagNameSNo = "S_NO"&lt;BR /&gt;Dim BlockNameQty As String: BlockNameQty = "DRAWING_TITLE5"&lt;BR /&gt;Dim TagNameQty As String: TagNameQty = "QUAN"&lt;BR /&gt;Dim TagNameMat As String: TagNameMat = "MATERIAL"&lt;BR /&gt;Dim SNoValue As String&lt;BR /&gt;Dim QtyValue As String&lt;BR /&gt;Dim StrMaterial As String&lt;/P&gt;&lt;P&gt;If objSelectOnScreen.Count = 0 Then&lt;BR /&gt;MsgBox "No Selected Block"&lt;BR /&gt;Exit Function&lt;BR /&gt;End If&lt;/P&gt;&lt;P&gt;Dim EachBlockRef As AcadBlockReference&lt;BR /&gt;Dim EachBlockname As String&lt;BR /&gt;Dim PartListBlockRefArr() As Variant&lt;BR /&gt;Dim i As Integer&lt;/P&gt;&lt;P&gt;'Creat PartListArr&lt;BR /&gt;For Each EachBlockRef In objSelectOnScreen&lt;BR /&gt;EachBlockname = EachBlockRef.Name&lt;BR /&gt;Select Case EachBlockname&lt;BR /&gt;Case BlockNameSNo&lt;BR /&gt;SNoValue = Func03GetAttValue(EachBlockRef, TagNameSNo)&lt;BR /&gt;SNoValue = "-" &amp;amp; Left(SNoValue, 4)&lt;BR /&gt;Case BlockNameQty&lt;BR /&gt;QtyValue = Func03GetAttValue(EachBlockRef, TagNameQty)&lt;BR /&gt;Case SizeBlockName&lt;BR /&gt;StrMaterial = Func03GetAttValue(EachBlockRef, TagNameMat)&lt;BR /&gt;If Left(StrMaterial, 1) = "-" Then&lt;BR /&gt;ReDim Preserve PartListBlockRefArr(0 To i)&lt;BR /&gt;Set PartListBlockRefArr(i) = EachBlockRef&lt;BR /&gt;i = i + 1&lt;BR /&gt;End If&lt;BR /&gt;End Select&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;'Creat WriteData&lt;BR /&gt;Dim WriteData() As String&lt;BR /&gt;Dim varAttributes As Variant&lt;BR /&gt;ReDim WriteData(0 To UBound(PartListBlockRefArr), 0 To 11)&lt;BR /&gt;For i = LBound(WriteData) To UBound(WriteData)&lt;BR /&gt;Set EachBlockRef = PartListBlockRefArr(i)&lt;BR /&gt;varAttributes = EachBlockRef.GetAttributes&lt;BR /&gt;WriteData(i, 0) = SNoValue&lt;BR /&gt;WriteData(i, 1) = QtyValue&lt;BR /&gt;For k = LBound(varAttributes) To UBound(varAttributes)&lt;BR /&gt;WriteData(i, k + 2) = varAttributes(k).TextString&lt;BR /&gt;Next&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;'Write Data to Excel&lt;BR /&gt;Dim EndRow As Integer&lt;BR /&gt;EndRow = WS.Cells(Rows.Count, 1).End(xlUp).Row + 1&lt;BR /&gt;Dim RowNo As Integer&lt;BR /&gt;Dim ColumnNo As Integer&lt;BR /&gt;For i = LBound(WriteData) To UBound(WriteData)&lt;BR /&gt;RowNo = EndRow + i&lt;BR /&gt;For k = 0 To 11&lt;BR /&gt;ColumnNo = k + 1&lt;BR /&gt;WS.Cells(RowNo, ColumnNo).Value = WriteData(i, k)&lt;BR /&gt;Next&lt;BR /&gt;Next&lt;/P&gt;&lt;P&gt;End Function&lt;/P&gt;</description>
      <pubDate>Wed, 17 Feb 2021 13:08:03 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/10089899#M6301</guid>
      <dc:creator>buianhtuan.cdt</dc:creator>
      <dc:date>2021-02-17T13:08:03Z</dc:date>
    </item>
    <item>
      <title>Re: VBA Printing to PDF</title>
      <link>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/13236999#M6303</link>
      <description>&lt;P&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/8969673"&gt;@buianhtuan.cdt&lt;/a&gt;&amp;nbsp;@Please post your code in a code window. It preserves the formatting. See the link in my signature. You can edit your posts by clicking on the three vertical dots.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 01 Jan 2025 01:32:40 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/vba-printing-to-pdf/m-p/13236999#M6303</guid>
      <dc:creator>Ed__Jobe</dc:creator>
      <dc:date>2025-01-01T01:32:40Z</dc:date>
    </item>
  </channel>
</rss>

