cailv 发表于 2008-4-16 11:06:00

非常感谢!!

dfgs 发表于 2008-6-5 13:21:00

下来看看                

nhy12345678 发表于 2008-6-5 21:52:00

请问CAD2006如何加载CADBatchPlot.mns 呢,另外CAD2006版本不能使用这个程序吗?<br/>

war3dd 发表于 2009-2-20 23:53:00

<p>我也下了,过段时间就学习 </p>

wubohan84 发表于 2009-2-23 16:01:00

可能大家的应用情况不同。我自己也写了个自动打印程序。我用的办法是识别图纸外框多段线的长度来自动识别图纸的位置。因为a3,a4图纸的周长是固定,所以不用去选择坐标。运行程序,全部自动打印。。。还有很多不完善的地方,不过自己公司的够用了

glhht 发表于 2009-3-10 10:35:00

顶你一下吧,很好的东西

xyghzzj 发表于 2009-7-22 00:11:00

<p>2009.7.21更新:</p><p>可以设置打印顺序为先行后列即Z型,或者先列后行的N型打印</p>

xyghzzj 发表于 2009-7-22 00:15:00

源代码见附件。

StartMe 发表于 2009-7-22 00:25:00

下来参考一下。辛苦。

xyghzzj 发表于 2009-7-22 00:26:00

<p>Option Explicit<br/>'图形集合<br/>Private colDwgs As New Collection<br/>'文档对象<br/>Private objDoc As AcadDocument<br/>'布局对象<br/>Private objLayout As AcadLayout<br/>'打印配置集合<br/>Private objPlotConfigurations As AcadPlotConfigurations<br/>'打印配置<br/>Private objPlotConfiguration As AcadPlotConfiguration<br/>Private objOriginalPC As AcadPlotConfiguration<br/>'打印对象<br/>Private objPlot As AcadPlot<br/>'图纸尺寸名称数组<br/>Private paperSizes&nbsp; As Variant<br/>Private Numerator As Double, Denominator As Double<br/>Private OffsetX As Double, OffsetY As Double<br/>Private ms As Boolean</p><p>Private Type BrowseInfo<br/>&nbsp;&nbsp;&nbsp; hOwner As Long<br/>&nbsp;&nbsp;&nbsp; pidlRoot As Long<br/>&nbsp;&nbsp;&nbsp; pszDisplayName As String<br/>&nbsp;&nbsp;&nbsp; lpszTitle As String<br/>&nbsp;&nbsp;&nbsp; ulFlags As Long<br/>&nbsp;&nbsp;&nbsp; lpfn As Long<br/>&nbsp;&nbsp;&nbsp; lParam As Long<br/>&nbsp;&nbsp;&nbsp; iImage As Long<br/>End Type<br/>Private Const MAX_PATH = 260<br/>'代表ESC键<br/>Private Const VK_ESCAPE = &amp;H1B</p><p>'API函数的声明<br/>Private Declare Function SHBrowseForFolder Lib "shell32.dll" _<br/>&nbsp;&nbsp;&nbsp; Alias "SHBrowseForFolderA" (lpBrowseInfo As BrowseInfo) As Long<br/>Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _<br/>&nbsp;&nbsp;&nbsp; ByVal lpWindowName As String) As Long<br/>Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal _<br/>&nbsp;&nbsp;&nbsp; pidl As Long, ByVal pszPath As String) As Long<br/>Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer</p><p>' 功能:判断用户是否按下某一个键<br/>' 输入:代表键的常量(从API Viewer中获得)<br/>' 调用:API函数GetAsyncKeyState<br/>' 返回:如果用户按下了指定的键,返回True;否则返回False<br/>' 示例:<br/>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If CheckKey(&amp;H1B) = True Then do sth<br/>Private Function CheckKey(lngKey As Long) As Boolean<br/>&nbsp; If GetAsyncKeyState(lngKey) Then<br/>&nbsp;&nbsp;&nbsp; CheckKey = True<br/>&nbsp; Else<br/>&nbsp;&nbsp;&nbsp; CheckKey = False<br/>&nbsp; End If<br/>End Function</p><p>Private Sub cboPaperSize_Change()<br/>&nbsp;&nbsp;&nbsp; '若组合框非空<br/>&nbsp;&nbsp;&nbsp; If cboPaperSize.Text &lt;&gt; "" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置图纸尺寸<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.CanonicalMediaName = paperSizes(cboPaperSize.ListIndex)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 显示图纸尺寸<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SetPlotZone<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 当居中打印时重新计算打印偏移<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkCenterPlot.Value Then Call SetOffset<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub cboPlotScale_Click()<br/>&nbsp;&nbsp;&nbsp; '定义图纸尺寸数组<br/>&nbsp;&nbsp;&nbsp; Dim Nu, De<br/>&nbsp;&nbsp;&nbsp; '定义分子数组<br/>&nbsp;&nbsp;&nbsp; Nu = Array(" ", "", "1", "1", "1", "1", "1", "1", "1", "1", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "1", "1", "1")<br/>&nbsp;&nbsp;&nbsp; '定义分母数组<br/>&nbsp;&nbsp;&nbsp; De = Array(" ", "", "1", "2", "4", "8", "10", "16", "20", "30", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "40", "50", "100", "0.5", "0.25", "0.125", "0.1", "0.01", "1536", "768", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "384", "192", "128", "96", "64", "48", "32", "24", "16", "12", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "4", "2", "1")<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '设置默认的显示项目<br/>&nbsp;&nbsp;&nbsp; If cboPlotScale.ListIndex = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用自定义比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Numerator = 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Denominator = 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtNumerator.Text = Numerator<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtDenominator.Text = Denominator<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If cboPlotScale.ListIndex &gt; 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Numerator = Nu(cboPlotScale.ListIndex)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Denominator = De(cboPlotScale.ListIndex)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtNumerator.Text = Numerator<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtDenominator.Text = Denominator<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '计算缩放比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SetScaleToFit<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Dim Q1<br/>&nbsp;&nbsp;&nbsp; '定义组合框索引到打印比例枚举值的映射<br/>&nbsp;&nbsp;&nbsp; Q1 = Array(100, 0, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)<br/>&nbsp;&nbsp;&nbsp; ' 设置图纸打印比例<br/>&nbsp;&nbsp;&nbsp; If cboPlotScale.ListIndex &lt;&gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用标准打印比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.UseStandardScale = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置标准打印比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.StandardScale = Q1(cboPlotScale.ListIndex)<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用自定义打印比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.UseStandardScale = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置自定义打印比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.SetCustomScale Numerator, Denominator<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ' 当居中打印时重新计算打印偏移<br/>&nbsp;&nbsp;&nbsp; If chkCenterPlot.Value Then Call SetOffset</p><p>End Sub</p><p>Private Sub cboPlotStyleTableNames_Change()<br/>&nbsp;&nbsp;&nbsp; ' 设置打印样式表<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.StyleSheet = cboPlotStyleTableNames.Text<br/>End Sub</p><p>Private Sub cboPrintersName_Click()<br/>&nbsp;&nbsp;&nbsp; '设置打印机配置<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.ConfigName = cboPrintersName.Text<br/>&nbsp;&nbsp;&nbsp; '更新显示AutoCAD中当前可用的所有图纸尺寸<br/>&nbsp;&nbsp;&nbsp; Call ListPaperSize<br/>End Sub</p><p>Private Sub chkCenterPlot_Click()<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; If chkCenterPlot.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置图纸是否居中打印<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.CenterPlot = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '计算打印偏移<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SetOffset<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置图纸是否居中打印<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.CenterPlot = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OffsetX = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OffsetY = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置文本框文本<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtOffsetX.Text = "0.00"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtOffsetY.Text = "0.00"<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Public Sub SetOffset()<br/>&nbsp;&nbsp;&nbsp; 'On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; Dim PaperWidth As Double, PaperHeight As Double, t As Double<br/>&nbsp;&nbsp;&nbsp; Dim PlotWidth As Double, PlotHeight As Double<br/>&nbsp;&nbsp;&nbsp; Dim WindowWidth As Double, WindowHeight As Double<br/>&nbsp;&nbsp;&nbsp; Dim MarginLowerLeft As Variant, MarginUpperRight As Variant<br/>&nbsp;&nbsp;&nbsp; Dim WindowLowerLeft As Variant, WindowUpperRight As Variant<br/>&nbsp;&nbsp;&nbsp; '刷新打印设备信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.RefreshPlotDeviceInfo<br/>&nbsp;&nbsp;&nbsp; '取得图纸尺寸信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.GetPaperSize PaperWidth, PaperHeight<br/>&nbsp;&nbsp;&nbsp; '取得图纸边界信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.GetPaperMargins MarginLowerLeft, MarginUpperRight<br/>&nbsp;&nbsp;&nbsp; '计算打印区域<br/>&nbsp;&nbsp;&nbsp; PlotWidth = PaperWidth - (MarginUpperRight(0) + MarginLowerLeft(0))<br/>&nbsp;&nbsp;&nbsp; PlotHeight = PaperHeight - (MarginUpperRight(1) + MarginLowerLeft(1))<br/>&nbsp;&nbsp;&nbsp; '根据选择的图形方向调换宽高<br/>&nbsp;&nbsp;&nbsp; If optVertical.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '图形方向为“纵向”时宽小于高<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If PlotWidth &gt; PlotHeight Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = PlotWidth<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotWidth = PlotHeight<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotHeight = t<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '图形方向为“横向”时宽大于高<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If PlotWidth &lt; PlotHeight Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = PlotWidth<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotWidth = PlotHeight<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotHeight = t<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If</p><p>&nbsp;&nbsp;&nbsp; '单位由“英寸”转换为“毫米”的比例因子<br/>&nbsp;&nbsp;&nbsp; Dim scaleUnit As Double<br/>&nbsp;&nbsp;&nbsp; scaleUnit = IIf(optMillimeters.Value, 1, 25.4)<br/>&nbsp;&nbsp;&nbsp; '获得打印窗口尺寸<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.GetWindowToPlot WindowLowerLeft, WindowUpperRight<br/>&nbsp;&nbsp;&nbsp; WindowWidth = WindowUpperRight(0) - WindowLowerLeft(0)<br/>&nbsp;&nbsp;&nbsp; WindowHeight = WindowUpperRight(1) - WindowLowerLeft(1)<br/>&nbsp;&nbsp;&nbsp; '获得缩放后的打印窗口尺寸<br/>&nbsp;&nbsp;&nbsp; WindowWidth = WindowWidth * Numerator / Denominator * scaleUnit<br/>&nbsp;&nbsp;&nbsp; WindowHeight = WindowHeight * Numerator / Denominator * scaleUnit<br/>&nbsp;&nbsp;&nbsp; '计算打印偏移<br/>&nbsp;&nbsp;&nbsp; OffsetX = (PlotWidth - WindowWidth) / 2<br/>&nbsp;&nbsp;&nbsp; OffsetY = (PlotHeight - WindowHeight) / 2<br/>&nbsp;&nbsp;&nbsp; Dim X As Double, Y As Double<br/>&nbsp;&nbsp;&nbsp; '单位由“毫米”转换为“英寸”<br/>&nbsp;&nbsp;&nbsp; X = IIf(optMillimeters.Value, OffsetX, OffsetX / 25.4)<br/>&nbsp;&nbsp;&nbsp; Y = IIf(optMillimeters.Value, OffsetY, OffsetY / 25.4)<br/>&nbsp;&nbsp;&nbsp; '设置文本框文本<br/>&nbsp;&nbsp;&nbsp; txtOffsetX.Text = Format(X, "#########0.00")<br/>&nbsp;&nbsp;&nbsp; txtOffsetY.Text = Format(Y, "#########0.00")<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub chkOnlyPlotThis_Change()<br/>&nbsp;&nbsp;&nbsp; '设置“打印到文件”组各控件激活状态<br/>&nbsp;&nbsp;&nbsp; If chkOnlyPlotThis.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '清除列表框中所有元素<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lstPlotFiles.Clear<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得当前图形名<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim strTemp As String<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = ThisDrawing.Application.ActiveDocument.Path &amp; "\" &amp; ThisDrawing.Application.ActiveDocument.name<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '向列表框添加当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lstPlotFiles.AddItem strTemp<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdBrowse.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdAdd.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdAddAll.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdClear.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdClearAll.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lstCurFiles.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lstPlotFiles.Enabled = False<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdBrowse.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdAdd.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdAddAll.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdClear.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdClearAll.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lstCurFiles.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lstPlotFiles.Enabled = True<br/>&nbsp;&nbsp;&nbsp; End If</p><p>End Sub</p><p>Private Sub chkPlotHidden_Change()<br/>&nbsp;&nbsp;&nbsp; '设置是否隐藏图纸空间对象<br/>&nbsp;&nbsp;&nbsp; If Not objPlotConfiguration.ModelType Then _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotHidden = chkPlotHidden.Value<br/>End Sub</p><p>Private Sub chkPlotToFile_Change()<br/>&nbsp;&nbsp;&nbsp; '设置“打印到文件”组各控件激活状态<br/>&nbsp;&nbsp;&nbsp; If chkPlotToFile.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbPlotPath.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboPlotPath.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdBrowse2.Enabled = True<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbPlotPath.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboPlotPath.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdBrowse2.Enabled = False<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub chkPlotWithLineweights_Change()<br/>&nbsp;&nbsp;&nbsp; '设置是否打印对象线宽<br/>&nbsp;&nbsp;&nbsp; If Not chkPlotWithPlotStyles.Value Then _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotWithLineweights = chkPlotWithLineweights.Value<br/>End Sub</p><p>Private Sub chkPlotWithPlotStyles_Change()<br/>&nbsp;&nbsp;&nbsp; '设置是否应用打印样式<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotWithPlotStyles = chkPlotWithPlotStyles.Value<br/>&nbsp;&nbsp;&nbsp; chkPlotWithLineweights.Enabled = Not (chkPlotWithPlotStyles.Value)<br/>End Sub</p><p>Private Sub chkReverse_Click()<br/>&nbsp;&nbsp;&nbsp; '设置图纸打印方向<br/>&nbsp;&nbsp;&nbsp; Call PaperRotationChange<br/>End Sub</p><p>Private Sub cmdAdd_Click()<br/>&nbsp;&nbsp;&nbsp; '如果列表框中未存在任何元素<br/>&nbsp;&nbsp;&nbsp; If lstCurFiles.ListCount = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请先向列表框中添加文件!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If</p><p>&nbsp;&nbsp;&nbsp; Dim strFlies As String<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp; Dim n As Integer<br/>&nbsp;&nbsp;&nbsp; n = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp; '将上面列表框中选中的对象添加到下面的列表框中<br/>&nbsp;&nbsp;&nbsp; For i = 0 To lstCurFiles.ListCount - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If lstCurFiles.Selected(i) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strFlies = lstCurFiles.List(i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = n + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not HasItem(lstPlotFiles, strFlies) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lstPlotFiles.AddItem lstCurFiles.List(i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; '如果列表框中未存在被选择的元素<br/>&nbsp;&nbsp;&nbsp; If n = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请选择要从列表中添加的元素!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub cmdAddAll_Click()<br/>&nbsp;&nbsp;&nbsp; '如果列表框中未存在任何元素<br/>&nbsp;&nbsp;&nbsp; If lstCurFiles.ListCount = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请先向列表框中添加文件!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Dim strFlies As String<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp;&nbsp; '将上面列表框中选中的对象添加到下面的列表框中<br/>&nbsp;&nbsp;&nbsp; For i = 0 To lstCurFiles.ListCount - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strFlies = lstCurFiles.List(i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not HasItem(lstPlotFiles, strFlies) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lstPlotFiles.AddItem lstCurFiles.List(i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next i<br/>End Sub</p><p>Private Sub cmdBrowse_Click()<br/>&nbsp;&nbsp;&nbsp; '在文本框中显示获得的路径<br/>&nbsp;&nbsp;&nbsp; txtCurPath.Text = ReturnFolder(0)<br/>End Sub</p><p>Private Sub cmdBrowse2_Click()<br/>&nbsp;&nbsp;&nbsp; Dim strPath As String<br/>&nbsp;&nbsp;&nbsp; strPath = ReturnFolder(0)<br/>&nbsp;&nbsp;&nbsp; '若返回文件夹路径非空<br/>&nbsp;&nbsp;&nbsp; If strPath &lt;&gt; "" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '若组合框中未存在返回文件夹路径,则将其添加到组合框中<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If HasItem2(strPath) &lt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '在组合框中显示获得的路径<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; With cboPlotPath<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .AddItem strPath, 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用下拉列表的形式<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Style = fmStyleDropDownList<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置下拉列表的下标下限<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .BoundColumn = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置默认的显示项目<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ListIndex = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '若组合框中已存在返回文件夹路径,则将返回文件夹路径置为选中<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; With cboPlotPath<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置默认的显示项目<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ListIndex = HasItem2(strPath)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub cmdClear_Click()<br/>&nbsp;&nbsp;&nbsp; '如果列表框中未存在任何元素<br/>&nbsp;&nbsp;&nbsp; If lstPlotFiles.ListCount = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请先向列表框中添加文件!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, n As Integer, count As Integer<br/>&nbsp;&nbsp;&nbsp; '列表框中元素的数量<br/>&nbsp;&nbsp;&nbsp; count = lstPlotFiles.ListCount<br/>&nbsp;&nbsp;&nbsp; n = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp; '将列表框中选中的对象删除<br/>&nbsp;&nbsp;&nbsp; For i = 0 To count - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If lstPlotFiles.Selected(i) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = n + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '移动列表框中的元素<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lstPlotFiles.List(i - n) = lstPlotFiles.List(i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '如果列表框中未存在被选择的元素<br/>&nbsp;&nbsp;&nbsp; If n = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请选择要从列表中清除的元素!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; '删除最后n行的元素<br/>&nbsp;&nbsp;&nbsp; For i = 1 To n<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lstPlotFiles.RemoveItem (count - i)<br/>&nbsp;&nbsp;&nbsp; Next i</p><p>End Sub</p><p>Private Sub cmdClearAll_Click()<br/>&nbsp;&nbsp;&nbsp; '如果列表框中未存在任何元素<br/>&nbsp;&nbsp;&nbsp; If lstPlotFiles.ListCount = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请先向列表框中添加文件!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Dim Msg, Style, Title, Help, Ctxt, Response, MyString<br/>&nbsp;&nbsp;&nbsp; Msg = "清除整个图形列表?"<br/>&nbsp;&nbsp;&nbsp; Style = vbOKCancel + vbQuestion + vbDefaultButton2<br/>&nbsp;&nbsp;&nbsp; Title = "Clear Files"<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Response = MsgBox(Msg, Style, Title)<br/>&nbsp;&nbsp;&nbsp; If Response = vbOK Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtCurPath.Text = ""<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '清除列表框中所有元素<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lstPlotFiles.Clear<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub cmdExit_Click()<br/>&nbsp;&nbsp; '退出<br/>&nbsp;&nbsp; End<br/>End Sub</p><p>Private Sub cmdInput_Click()<br/>&nbsp;&nbsp;&nbsp; '导入打印设置<br/>&nbsp;&nbsp;&nbsp; '设置标准对话框<br/>&nbsp;&nbsp;&nbsp; With comDlg<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置标准对话框标题<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .DialogTitle = "导入打印设置"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置标准对话框类型列表中所显示的过滤器<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '显示[打开]对话框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ShowOpen<br/>&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Dim strFileName As String<br/>&nbsp;&nbsp;&nbsp; strFileName = comDlg.fileName<br/>&nbsp;&nbsp;&nbsp; '若返回文件名为空,不进行操作<br/>&nbsp;&nbsp;&nbsp; If strFileName = "" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请重新选择文件位置!"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入文件的操作<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, nFile As Integer<br/>&nbsp;&nbsp;&nbsp; Dim X As Double, Y As Double<br/>&nbsp;&nbsp;&nbsp; Dim count As Integer, index As Integer<br/>&nbsp;&nbsp;&nbsp; Dim strTemp As String<br/>&nbsp;&nbsp;&nbsp; '获得下一个可供Open语句使用的文件号<br/>&nbsp;&nbsp;&nbsp; nFile = FreeFile<br/>&nbsp;&nbsp;&nbsp; '打开文件<br/>&nbsp;&nbsp;&nbsp; Open strFileName For Input As #nFile<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入当前路径<br/>&nbsp;&nbsp;&nbsp; '读入一行文本并存储在变量中<br/>&nbsp;&nbsp;&nbsp; Line Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '读入当前路径并设置文本框文字<br/>&nbsp;&nbsp;&nbsp; Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; txtCurPath.Text = strTemp<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; '读入打印文件列表并添加到列表框中<br/>&nbsp;&nbsp;&nbsp; Call InputData3(lstPlotFiles, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入是否仅打印当前图形并设置复选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; Call InputData2(chkOnlyPlotThis, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入打印机配置列表并添加到组合框中<br/>&nbsp;&nbsp;&nbsp; Call InputData(cboPrintersName, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入打印样式表并添加到组合框中<br/>&nbsp;&nbsp;&nbsp; Call InputData(cboPlotStyleTableNames, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入图纸尺寸列表并添加到组合框中<br/>&nbsp;&nbsp;&nbsp; Call InputData(cboPaperSize, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入图纸单位并设置单选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; '读入一行文本并存储在变量中<br/>&nbsp;&nbsp;&nbsp; Line Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '读入图纸单位<br/>&nbsp;&nbsp;&nbsp; Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '设置单选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; If strTemp = "毫米" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optMillimeters.Value = True<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optInches.Value = True<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入图纸方向并设置单选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; '读入一行文本并存储在变量中<br/>&nbsp;&nbsp;&nbsp; Line Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '读入图纸方向<br/>&nbsp;&nbsp;&nbsp; Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '设置单选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; If strTemp = "纵向" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optVertical.Value = True<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optHorizontal.Value = True<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入是否反向打印并设置复选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; Call InputData2(chkReverse, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入打印份数<br/>&nbsp;&nbsp;&nbsp; '读入一行文本并存储在变量中<br/>&nbsp;&nbsp;&nbsp; Line Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '读入打印份数<br/>&nbsp;&nbsp;&nbsp; Input #nFile, count<br/>&nbsp;&nbsp;&nbsp; '设置文本框文字<br/>&nbsp;&nbsp;&nbsp; txtNumber.Text = count<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入是否打印到文件并设置复选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; Call InputData2(chkPlotToFile, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入打印路径列表并添加到组合框中<br/>&nbsp;&nbsp;&nbsp; Call InputData(cboPlotPath, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入打印比例列表并添加到组合框中<br/>&nbsp;&nbsp;&nbsp; Call InputData(cboPlotScale, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入一行文本并存储在变量中<br/>&nbsp;&nbsp;&nbsp; Line Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '读入当前打印比例并设置文本框文字<br/>&nbsp;&nbsp;&nbsp; Input #nFile, X<br/>&nbsp;&nbsp;&nbsp; Input #nFile, Y<br/>&nbsp;&nbsp;&nbsp; txtNumerator.Text = X<br/>&nbsp;&nbsp;&nbsp; txtDenominator.Text = Y<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入是否居中打印并设置复选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; Call InputData2(chkCenterPlot, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入打印偏移<br/>&nbsp;&nbsp;&nbsp; '读入一行文本并存储在变量中<br/>&nbsp;&nbsp;&nbsp; Line Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '读入打印偏移并设置文本框文字<br/>&nbsp;&nbsp;&nbsp; Input #nFile, X<br/>&nbsp;&nbsp;&nbsp; Input #nFile, Y<br/>&nbsp;&nbsp;&nbsp; txtOffsetX.Text = X<br/>&nbsp;&nbsp;&nbsp; txtOffsetY.Text = Y<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入是否打印对象线宽并设置复选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; Call InputData2(chkPlotWithLineweights, nFile)<br/>&nbsp;&nbsp;&nbsp; '读入是否采用打印样式并设置复选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; Call InputData2(chkPlotWithPlotStyles, nFile)<br/>&nbsp;&nbsp;&nbsp; '读入是否隐藏图纸空间对象并设置复选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; Call InputData2(chkPlotHidden, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; '读入图框形式并设置单选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; '读入一行文本并存储在变量中<br/>&nbsp;&nbsp;&nbsp; Line Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '读入图框形式<br/>&nbsp;&nbsp;&nbsp; Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '设置单选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; If strTemp = "图块" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optBlock.Value = True<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optLayer.Value = True<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; '读入图块名列表并添加到组合框中<br/>&nbsp;&nbsp;&nbsp; Call InputData(cboBlockName, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '读入图层名列表并添加到组合框中<br/>&nbsp;&nbsp;&nbsp; Call InputData(cboLayerName, nFile)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '关闭文件<br/>&nbsp;&nbsp;&nbsp; Close #nFile</p><p>End Sub</p><p>Private Sub cmdListPrints_Click()<br/>&nbsp;&nbsp;&nbsp; ' 显示AutoCAD中当前可用的打印机列表<br/>&nbsp;&nbsp;&nbsp; Call ListPlotDeviceNames<br/>End Sub</p><p>Private Sub cmdOutput_Click()<br/>&nbsp;&nbsp;&nbsp; '导出打印设置<br/>&nbsp;&nbsp;&nbsp; '设置标准对话框<br/>&nbsp;&nbsp;&nbsp; With comDlg<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置标准对话框标题<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .DialogTitle = "导出打印设置"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置标准对话框类型列表中所显示的过滤器<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置[另存为]对话框的缺省扩展名<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .DefaultExt = "txt"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '显示[另存为]对话框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ShowSave<br/>&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Dim strFileName As String, strTemp As String<br/>&nbsp;&nbsp;&nbsp; strFileName = comDlg.fileName<br/>&nbsp;&nbsp;&nbsp; '若返回文件名为空,不进行操作<br/>&nbsp;&nbsp;&nbsp; If strFileName = "" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请重新选择保存位置!"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '保存文件的操作<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp; '打开文件<br/>&nbsp;&nbsp;&nbsp; Open strFileName For Output As #1<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出当前路径<br/>&nbsp;&nbsp;&nbsp; Print #1, "当前路径:"<br/>&nbsp;&nbsp;&nbsp; Print #1, txtCurPath.Text<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出打印文件列表<br/>&nbsp;&nbsp;&nbsp; Print #1, "打印文件列表:"<br/>&nbsp;&nbsp;&nbsp; '输出打印机配置列表的信息<br/>&nbsp;&nbsp;&nbsp; Call OutputData3(lstPlotFiles, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出是否仅打印当前图形<br/>&nbsp;&nbsp;&nbsp; Print #1, "是否仅打印当前图形"<br/>&nbsp;&nbsp;&nbsp; Call OutputData2(chkOnlyPlotThis, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出打印机配置<br/>&nbsp;&nbsp;&nbsp; Print #1, "打印机配置:"<br/>&nbsp;&nbsp;&nbsp; '输出打印机配置列表的信息<br/>&nbsp;&nbsp;&nbsp; Call OutputData(cboPrintersName, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出打印样式表<br/>&nbsp;&nbsp;&nbsp; Print #1, "打印样式表:"<br/>&nbsp;&nbsp;&nbsp; '输出打印样式表的信息<br/>&nbsp;&nbsp;&nbsp; Call OutputData(cboPlotStyleTableNames, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出图纸尺寸列表<br/>&nbsp;&nbsp;&nbsp; Print #1, "图纸尺寸列表:"<br/>&nbsp;&nbsp;&nbsp; '输出图纸尺寸列表的信息<br/>&nbsp;&nbsp;&nbsp; Call OutputData(cboPaperSize, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出图纸单位<br/>&nbsp;&nbsp;&nbsp; Print #1, "图纸单位:"<br/>&nbsp;&nbsp;&nbsp; '输出图纸单位信息<br/>&nbsp;&nbsp;&nbsp; If optMillimeters.Value = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = "毫米"<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = "英寸"<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Print #1, strTemp<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出图纸方向<br/>&nbsp;&nbsp;&nbsp; Print #1, "图纸方向:"<br/>&nbsp;&nbsp;&nbsp; '输出图纸方向信息<br/>&nbsp;&nbsp;&nbsp; If optVertical.Value = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = "纵向"<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = "横向"<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Print #1, strTemp<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出是否反向打印<br/>&nbsp;&nbsp;&nbsp; Print #1, "是否反向打印:"<br/>&nbsp;&nbsp;&nbsp; Call OutputData2(chkReverse, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出打印份数<br/>&nbsp;&nbsp;&nbsp; Print #1, "打印份数:"<br/>&nbsp;&nbsp;&nbsp; Print #1, txtNumber.Text<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出是否打印到文件<br/>&nbsp;&nbsp;&nbsp; Print #1, "是否打印到文件:"<br/>&nbsp;&nbsp;&nbsp; Call OutputData2(chkPlotToFile, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出打印路径<br/>&nbsp;&nbsp;&nbsp; Print #1, "打印路径:"<br/>&nbsp;&nbsp;&nbsp; '输出打印路径列表的信息<br/>&nbsp;&nbsp;&nbsp; Call OutputData(cboPlotPath, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出打印比例<br/>&nbsp;&nbsp;&nbsp; Print #1, "打印比例:"<br/>&nbsp;&nbsp;&nbsp; '输出打印比例列表的信息<br/>&nbsp;&nbsp;&nbsp; Call OutputData(cboPlotScale, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出当前打印比例<br/>&nbsp;&nbsp;&nbsp; Print #1, "当前打印比例:"<br/>&nbsp;&nbsp;&nbsp; Print #1, txtNumerator.Text<br/>&nbsp;&nbsp;&nbsp; Print #1, txtDenominator.Text<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出是否居中打印<br/>&nbsp;&nbsp;&nbsp; Print #1, "是否居中打印:"<br/>&nbsp;&nbsp;&nbsp; Call OutputData2(chkCenterPlot, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出打印偏移<br/>&nbsp;&nbsp;&nbsp; Print #1, "打印偏移:"<br/>&nbsp;&nbsp;&nbsp; Print #1, txtOffsetX.Text<br/>&nbsp;&nbsp;&nbsp; Print #1, txtOffsetY.Text<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出是否打印对象线宽<br/>&nbsp;&nbsp;&nbsp; Print #1, "是否打印对象线宽:"<br/>&nbsp;&nbsp;&nbsp; Call OutputData2(chkPlotWithLineweights, 1)<br/>&nbsp;&nbsp;&nbsp; '输出是否采用打印样式<br/>&nbsp;&nbsp;&nbsp; Print #1, "是否采用打印样式:"<br/>&nbsp;&nbsp;&nbsp; Call OutputData2(chkPlotWithPlotStyles, 1)<br/>&nbsp;&nbsp;&nbsp; '输出是否隐藏图纸空间对象<br/>&nbsp;&nbsp;&nbsp; Print #1, "是否隐藏图纸空间对象:"<br/>&nbsp;&nbsp;&nbsp; Call OutputData2(chkPlotHidden, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出图框形式<br/>&nbsp;&nbsp;&nbsp; Print #1, "图框形式:"<br/>&nbsp;&nbsp;&nbsp; '输出图框形式信息<br/>&nbsp;&nbsp;&nbsp; If optBlock.Value = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = "图块"<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = "图层"<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Print #1, strTemp<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出图块名列表<br/>&nbsp;&nbsp;&nbsp; Print #1, "图块名列表:"<br/>&nbsp;&nbsp;&nbsp; '输出图块名列表的信息<br/>&nbsp;&nbsp;&nbsp; Call OutputData(cboBlockName, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '输出图层名列表<br/>&nbsp;&nbsp;&nbsp; Print #1, "图块名列表:"<br/>&nbsp;&nbsp;&nbsp; '输出图层名列表的信息<br/>&nbsp;&nbsp;&nbsp; Call OutputData(cboLayerName, 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '关闭文件<br/>&nbsp;&nbsp;&nbsp; Close 1</p><p>End Sub</p><p>Private Sub cmdPick_Click()<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; Dim objSelect As AcadEntity<br/>&nbsp;&nbsp;&nbsp; Dim ptPick As Variant<br/>&nbsp;&nbsp;&nbsp; Dim strTemp As String<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Set objDoc = ThisDrawing.Application.ActiveDocument<br/>&nbsp;&nbsp;&nbsp; '将控制权交给AutoCAD<br/>&nbsp;&nbsp;&nbsp; frmBatchPlot.Hide<br/>&nbsp;&nbsp;&nbsp; '在AutoCAD中选择实体并判断类型<br/>Retry:<br/>&nbsp;&nbsp;&nbsp; objDoc.Utility.GetEntity objSelect, ptPick, vbCrLf &amp; "请选择实体:"<br/>&nbsp;&nbsp;&nbsp; ' 处理按下Esc键的错误<br/>&nbsp;&nbsp;&nbsp; If objSelect Is Nothing Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If CheckKey(VK_ESCAPE) = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '显示对话框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frmBatchPlot.Show<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GoTo Retry<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp; ' 处理未选择到实体的错误<br/>&nbsp;&nbsp;&nbsp; If Err &lt;&gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Err.Clear<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GoTo Retry<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '若为指定图块<br/>&nbsp;&nbsp;&nbsp; If optBlock.Value = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '判断实体是否块参照<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If TypeOf objSelect Is AcadBlockReference Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '判断实体是否模型空间、图纸空间和匿名块<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If StrComp(Left(objSelect.name, 1), "*") &lt;&gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得块参照名<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = objSelect.name<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "您选择的是匿名块,请重新选择块参照!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '显示对话框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frmBatchPlot.Show<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "您选择的不是块参照,请重新选择块参照!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '显示对话框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frmBatchPlot.Show<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '刷新块参照列表<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call ListBlock<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将所选块参照在组合框中置为当前<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SetSelected(cboBlockName, strTemp)<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '判断实体是否多段线<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If TypeOf objSelect Is AcadLWPolyline Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得多段线所在图层名<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = objSelect.Layer<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "您选择的不是轻量多段线,请重新选择轻量多段线!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '显示对话框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frmBatchPlot.Show<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 刷新图层列表<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call ListLayer<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将所选实体所在图层在组合框中置为当前<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SetSelected(cboLayerName, strTemp)<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; '显示对话框<br/>&nbsp;&nbsp;&nbsp; frmBatchPlot.Show</p><p>End Sub</p><p>Private Sub cmdPreview_Click()<br/>&nbsp;&nbsp;&nbsp; '若按图块进行批量打印<br/>&nbsp;&nbsp;&nbsp; If optBlock.Value = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If cboBlockName.ListCount = 0 Or cboBlockName.Text = "" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请先选择块参照!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call PreviewByBlock(cboBlockName.Text)<br/>&nbsp;&nbsp;&nbsp; '若按图层进行批量打印<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If cboLayerName.ListCount = 0 Or cboLayerName.Text = "" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请先选择块参照!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call PreviewByLayer(cboLayerName.Text)<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub cmdRefresh_Click()<br/>&nbsp;&nbsp;&nbsp; '刷新块参照列表<br/>&nbsp;&nbsp;&nbsp; Call ListBlock<br/>&nbsp;&nbsp;&nbsp; ' 刷新图层列表<br/>&nbsp;&nbsp;&nbsp; Call ListLayer<br/>End Sub</p><p>Private Sub cmdPlot_Click()<br/>&nbsp;&nbsp;&nbsp; '若按图块进行批量打印<br/>&nbsp;&nbsp;&nbsp; If optBlock.Value = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If cboBlockName.ListCount = 0 Or cboBlockName.Text = "" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请先选择块参照!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call BatchPlotByBlock(cboBlockName.Text)<br/>&nbsp;&nbsp;&nbsp; '若按图层进行批量打印<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If cboLayerName.ListCount = 0 Or cboLayerName.Text = "" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请先选择块参照!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call BatchPlotByLayer(cboLayerName.Text)<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub cmdAbout_Click()<br/>&nbsp;&nbsp; '显示关于对话框<br/>&nbsp;&nbsp; frmAbout.Show<br/>End Sub</p><p>Private Sub Label26_Click()</p><p>End Sub</p><p>Private Sub optBlock_Change()<br/>&nbsp;&nbsp;&nbsp; '设置“图块与图层”组各控件激活状态<br/>&nbsp;&nbsp;&nbsp; If optBlock.Value = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbBlockName.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboBlockName.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbLayerName.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboLayerName.Enabled = False<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbBlockName.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboBlockName.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbLayerName.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboLayerName.Enabled = True<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub optLayer_Change()<br/>&nbsp;&nbsp;&nbsp; '设置“图块与图层”组各控件激活状态<br/>&nbsp;&nbsp;&nbsp; If optBlock.Value = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbBlockName.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboBlockName.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbLayerName.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboLayerName.Enabled = False<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbBlockName.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboBlockName.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbLayerName.Enabled = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboLayerName.Enabled = True<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub optMillimeters_Change()<br/>&nbsp;&nbsp;&nbsp; '设置图纸单位<br/>&nbsp;&nbsp;&nbsp; If (optMillimeters.Value = True And ms = False) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置图纸单位<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PaperUnits = acMillimeters<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '修改标签<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbUnit.Caption = "毫米 ="<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbUnitX.Caption = "毫米"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbUnitY.Caption = "毫米"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbPaperUnit.Caption = "毫米"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Denominator = Denominator / 25.4<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtDenominator.Text = Format(Denominator, "#########0.000")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtOffsetX.Text = Format(OffsetX, "#########0.00")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtOffsetY.Text = Format(OffsetY, "#########0.00")<br/>&nbsp;&nbsp;&nbsp; ElseIf (optMillimeters.Value = False And ms = True) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置图纸单位<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PaperUnits = acInches<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '修改标签<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbUnit.Caption = "英寸 ="<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbUnitX.Caption = "英寸"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbUnitY.Caption = "英寸"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbPaperUnit.Caption = "英寸"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Denominator = Denominator * 25.4<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtDenominator.Text = Format(Denominator, "#########0.000")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtOffsetX.Text = Format(OffsetX / 25.4, "#########0.00")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtOffsetY.Text = Format(OffsetY / 25.4, "#########0.00")<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '非“按图纸空间缩放”时由标准比例变为自定义比例<br/>&nbsp;&nbsp;&nbsp; If cboPlotScale.ListIndex &gt; 1 Then cboPlotScale.ListIndex = 0<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '显示图纸尺寸<br/>&nbsp;&nbsp;&nbsp; Call SetPlotZone<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ms = optMillimeters.Value<br/>End Sub</p><p>Private Sub optSortZ_Click()</p><p>End Sub</p><p>Private Sub OptVertical_Change()<br/>&nbsp;&nbsp;&nbsp; '设置图纸打印方向<br/>&nbsp;&nbsp;&nbsp; Call PaperRotationChange<br/>&nbsp;&nbsp;&nbsp; '当图纸比例选项为“按图纸空间缩放”时重新计算缩放比例<br/>&nbsp;&nbsp;&nbsp; If cboPlotScale.ListIndex = 1 Then Call SetScaleToFit<br/>&nbsp;&nbsp;&nbsp; ' 当居中打印时重新计算打印偏移<br/>&nbsp;&nbsp;&nbsp; If chkCenterPlot.Value Then Call SetOffset<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub spnAngle_SpinDown()<br/>&nbsp;&nbsp;&nbsp; If CInt(txtNumber.Text) &gt; 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtNumber.Text = CInt(txtNumber.Text) - 1<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub spnAngle_SpinUp()<br/>&nbsp;&nbsp;&nbsp; txtNumber.Text = CInt(txtNumber.Text) + 1<br/>End Sub</p><p>Private Sub txtCurPath_Change()<br/>&nbsp;&nbsp;&nbsp; '查找文件,向列表框中添加<br/>&nbsp;&nbsp;&nbsp; If Len(Dir(txtCurPath.Text)) &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FindFile colDwgs, txtCurPath.Text, "dwg"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If AddToList(lstCurFiles, colDwgs) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub txtDenominator_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)<br/>&nbsp;&nbsp;&nbsp; ' 设置自定义图纸尺寸<br/>&nbsp;&nbsp;&nbsp; If IsNumeric(CDbl(txtDenominator.Text)) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim strTemp As String<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '记住文本框文本<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = txtDenominator.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置组合框显示项目为“自定义”<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboPlotScale.ListIndex = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '恢复文本框文字(上步操作有时会导致文本框值归1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtDenominator.Text = strTemp<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将文本框文本转换为实数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Denominator = CDbl(txtDenominator.Text)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用自定义打印比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.UseStandardScale = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置自定义打印比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.SetCustomScale Numerator, Denominator<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 当居中打印时重新计算打印偏移<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkCenterPlot.Value Then Call SetOffset<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请输入数字!", vbCritical<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub txtNumerator_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)<br/>&nbsp;&nbsp;&nbsp; ' 设置自定义图纸尺寸<br/>&nbsp;&nbsp;&nbsp; If IsNumeric(CDbl(txtNumerator.Text)) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim strTemp As String<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '记住文本框文本<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = txtNumerator.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置组合框显示项目为“自定义”<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboPlotScale.ListIndex = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '恢复文本框文字(上步操作有时会导致文本框值归1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtNumerator.Text = strTemp<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将文本框文本转换为实数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Numerator = CDbl(txtNumerator.Text)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用自定义打印比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.UseStandardScale = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置自定义打印比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.SetCustomScale Numerator, Denominator<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 当居中打印时重新计算打印偏移<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkCenterPlot.Value Then Call SetOffset<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请输入数字!", vbCritical<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub txtOffsetX_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)<br/>&nbsp;&nbsp;&nbsp; ' 输入检查<br/>&nbsp;&nbsp;&nbsp;&nbsp; If Not ((KeyAscii &gt;= Asc("0") And KeyAscii &lt;= Asc("9")) Or KeyAscii = Asc(".") Or KeyAscii = Asc("-")) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请输入数字!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub txtOffsetX_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)<br/>&nbsp;&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp;&nbsp; ' 设置自定义图纸尺寸<br/>&nbsp;&nbsp;&nbsp;&nbsp; If IsNumeric(CDbl(txtOffsetX.Text)) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim strTemp As String<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '记住文本框文本<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = txtOffsetX.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将文本框文本转换为实数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OffsetX = CDbl(txtOffsetX.Text)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '取消“居中打印”复选框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkCenterPlot.Value = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '恢复文本框文字(上步操作有时会导致文本框值归零)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtOffsetX.Text = strTemp<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim ptPlotOrigin(0 To 1) As Double<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置自定义打印偏移<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '图形方向为“横向”时宽高互调<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptPlotOrigin(0) = IIf(optVertical.Value, OffsetX, OffsetY)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptPlotOrigin(1) = IIf(optVertical.Value, OffsetY, OffsetX)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.CenterPlot = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotOrigin = ptPlotOrigin<br/>&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请输入数字!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub txtOffsetY_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)<br/>&nbsp;&nbsp;&nbsp;&nbsp; ' 输入检查<br/>&nbsp;&nbsp;&nbsp;&nbsp; If Not ((KeyAscii &gt;= Asc("0") And KeyAscii &lt;= Asc("9")) Or KeyAscii = Asc(".") Or KeyAscii = Asc("-")) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请输入数字!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub txtOffsetY_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp;&nbsp; ' 设置自定义图纸尺寸<br/>&nbsp;&nbsp;&nbsp;&nbsp; If IsNumeric(CDbl(txtOffsetY.Text)) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim strTemp As String<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '记住文本框文本<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = txtOffsetY.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将文本框文本转换为实数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OffsetY = CDbl(txtOffsetY.Text)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '取消“居中打印”复选框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkCenterPlot.Value = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '恢复文本框文字(上步操作有时会导致文本框值归零)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtOffsetY.Text = strTemp<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim ptPlotOrigin(0 To 1) As Double<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置自定义打印偏移<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '图形方向为“横向”时宽高互调<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptPlotOrigin(0) = IIf(optVertical.Value, OffsetX, OffsetY)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptPlotOrigin(1) = IIf(optVertical.Value, OffsetY, OffsetX)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.CenterPlot = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotOrigin = ptPlotOrigin<br/>&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请输入数字!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub UserForm_Initialize()<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; '取得当前文档对象<br/>&nbsp;&nbsp;&nbsp; Set objDoc = ThisDrawing.Application.ActiveDocument<br/>&nbsp;&nbsp;&nbsp; '取得当前布局对象<br/>&nbsp;&nbsp;&nbsp; Set objLayout = ThisDrawing.ActiveLayout<br/>&nbsp;&nbsp;&nbsp; '取得当前打印对象<br/>&nbsp;&nbsp;&nbsp; Set objPlot = ThisDrawing.Plot<br/>&nbsp;&nbsp;&nbsp; '从文件对象取得打印配置集合<br/>&nbsp;&nbsp;&nbsp; Set objPlotConfigurations = ThisDrawing.PlotConfigurations<br/>&nbsp;&nbsp;&nbsp; '清空以前的打印配置集合<br/>&nbsp;&nbsp;&nbsp; For Each objPlotConfiguration In objPlotConfigurations<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.Delete<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; '添加打印配置<br/>&nbsp;&nbsp;&nbsp; Set objOriginalPC = objPlotConfigurations.Add("原来的打印配置", True)<br/>&nbsp;&nbsp;&nbsp; Set objPlotConfiguration = objPlotConfigurations.Add("我的打印配置", True)<br/>&nbsp;&nbsp;&nbsp; '复制打印配置<br/>&nbsp;&nbsp;&nbsp; objOriginalPC.CopyFrom objLayout<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.CopyFrom objLayout<br/>&nbsp;&nbsp;&nbsp; '重命名打印配置<br/>&nbsp;&nbsp;&nbsp; objOriginalPC.name = "原来的打印配置"<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.name = "我的打印配置"<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '禁用“当前路径”文本框<br/>&nbsp;&nbsp;&nbsp; txtCurPath.Enabled = False<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '设置图纸单位<br/>&nbsp;&nbsp;&nbsp; If objOriginalPC.PaperUnits = acInches Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optInches.Value = True<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optMillimeters.Value = True<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; '记录上次的图纸单位设置<br/>&nbsp;&nbsp;&nbsp; ms = optMillimeters.Value<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '设置图纸方向<br/>&nbsp;&nbsp;&nbsp; Call GetPlotRotation<br/>&nbsp;&nbsp;&nbsp; '刷新打印机列表<br/>&nbsp;&nbsp;&nbsp; Call ListPlotDeviceNames<br/>&nbsp;&nbsp;&nbsp; '刷新打印样式表<br/>&nbsp;&nbsp;&nbsp; Call ListPlotStyleTableNames<br/>&nbsp;&nbsp;&nbsp; '刷新打印比例列表<br/>&nbsp;&nbsp;&nbsp; Call ListPlotScale<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '设置是否居中打印<br/>&nbsp;&nbsp;&nbsp; chkCenterPlot.Value = objOriginalPC.CenterPlot<br/>&nbsp;&nbsp;&nbsp; '设置打印偏移<br/>&nbsp;&nbsp;&nbsp; If Not chkCenterPlot.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim ptPlotOrigin As Variant<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '读取打印偏移<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptPlotOrigin = objOriginalPC.PlotOrigin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置打印偏移<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '图形方向为“横向”时宽高互调<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OffsetX = IIf(optVertical.Value, ptPlotOrigin(0), ptPlotOrigin(1))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OffsetY = IIf(optVertical.Value, ptPlotOrigin(1), ptPlotOrigin(0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtOffsetX.Text = OffsetX<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtOffsetY.Text = OffsetY<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '设置图纸打印份数<br/>&nbsp;&nbsp;&nbsp; txtNumber.Text = objPlot.NumberOfCopies<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '设置“打印到文件”是否选中<br/>&nbsp;&nbsp;&nbsp; chkPlotToFile.Value = False<br/>&nbsp;&nbsp;&nbsp; '禁用“打印到文件”组各控件<br/>&nbsp;&nbsp;&nbsp; lbPlotPath.Enabled = False<br/>&nbsp;&nbsp;&nbsp; cboPlotPath.Enabled = False<br/>&nbsp;&nbsp;&nbsp; cmdBrowse2.Enabled = False<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '设置打印选项<br/>&nbsp;&nbsp;&nbsp; chkPlotWithPlotStyles.Value = objOriginalPC.PlotWithPlotStyles<br/>&nbsp;&nbsp;&nbsp; chkPlotWithLineweights.Enabled = Not (chkPlotWithPlotStyles.Value)<br/>&nbsp;&nbsp;&nbsp; chkPlotWithLineweights.Value = objOriginalPC.PlotWithLineweights<br/>&nbsp;&nbsp;&nbsp; chkPlotHidden.Value = objOriginalPC.PlotHidden<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ' 显示AutoCAD中当前可用的图块<br/>&nbsp;&nbsp;&nbsp; Call ListBlock<br/>&nbsp;&nbsp;&nbsp; ' 显示AutoCAD中当前可用的图层<br/>&nbsp;&nbsp;&nbsp; Call ListLayer<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Public Sub GetPlotRotation()<br/>&nbsp;&nbsp;&nbsp; Dim PaperWidth As Double, PaperHeight As Double, t As Double<br/>&nbsp;&nbsp;&nbsp; '取得图纸尺寸信息<br/>&nbsp;&nbsp;&nbsp; objOriginalPC.GetPaperSize PaperWidth, PaperHeight<br/>&nbsp;&nbsp;&nbsp; '设置图纸方向<br/>&nbsp;&nbsp;&nbsp; If PaperWidth &lt; PaperHeight Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select Case objOriginalPC.PlotRotation<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case ac0degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optVertical.Value = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkReverse.Value = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case ac90degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optHorizontal.Value = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkReverse.Value = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case ac180degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optVertical.Value = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkReverse.Value = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case ac270degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optHorizontal.Value = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkReverse.Value = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Select<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select Case objOriginalPC.PlotRotation<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case ac0degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optHorizontal.Value = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkReverse.Value = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case ac90degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optVertical.Value = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkReverse.Value = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case ac180degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optHorizontal.Value = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkReverse.Value = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case ac270degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optVertical.Value = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkReverse.Value = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Select<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Public Sub SetPlotRotation()<br/>&nbsp;&nbsp;&nbsp; Dim PaperWidth As Double, PaperHeight As Double, t As Double<br/>&nbsp;&nbsp;&nbsp; '取得图纸尺寸信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.GetPaperSize PaperWidth, PaperHeight<br/>&nbsp;&nbsp;&nbsp; ' 设置图纸打印方向<br/>&nbsp;&nbsp;&nbsp; If PaperWidth &lt; PaperHeight Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If optVertical.Value = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkReverse.Value = False Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotRotation = ac0degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotRotation = ac180degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkReverse.Value = False Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotRotation = ac90degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotRotation = ac270degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If optVertical.Value = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkReverse.Value = False Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotRotation = ac90degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotRotation = ac270degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkReverse.Value = False Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotRotation = ac0degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotRotation = ac180degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Public Sub SetPlotConfiguration()<br/>&nbsp;&nbsp;&nbsp; '因有些选项会相互影响,打印前再应用一次打印配置以确保打印成功<br/>&nbsp;&nbsp;&nbsp; '设置打印机配置<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.ConfigName = cboPrintersName.Text<br/>&nbsp;&nbsp;&nbsp; ' 设置打印样式表<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.StyleSheet = cboPlotStyleTableNames.Text<br/>&nbsp;&nbsp;&nbsp; ' 设置图纸尺寸<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.CanonicalMediaName = paperSizes(cboPaperSize.ListIndex)<br/>&nbsp;&nbsp;&nbsp; '设置图纸单位<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.PaperUnits = IIf(optMillimeters.Value, acMillimeters, acInches)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Dim Q1<br/>&nbsp;&nbsp;&nbsp;&nbsp; '定义组合框索引到打印比例枚举值的映射<br/>&nbsp;&nbsp;&nbsp; Q1 = Array(100, 0, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)<br/>&nbsp;&nbsp;&nbsp; ' 设置图纸打印比例<br/>&nbsp;&nbsp;&nbsp; If cboPlotScale.ListIndex &lt;&gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用标准打印比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.UseStandardScale = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置标准打印比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.StandardScale = Q1(cboPlotScale.ListIndex)<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用自定义打印比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.UseStandardScale = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置自定义打印比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.SetCustomScale Numerator, Denominator<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ' 设置图纸打印方向<br/>&nbsp;&nbsp;&nbsp; Call SetPlotRotation<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ' 设置图纸是否居中打印<br/>&nbsp;&nbsp;&nbsp; If chkCenterPlot.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.CenterPlot = True<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置自定义打印偏移<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim ptPlotOrigin(0 To 1) As Double<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '图形方向为“横向”时宽高互调<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptPlotOrigin(0) = IIf(optVertical.Value, OffsetX, OffsetY)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptPlotOrigin(1) = IIf(optVertical.Value, OffsetY, OffsetX)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.CenterPlot = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotOrigin = ptPlotOrigin<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '设置是否应用打印样式<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotWithPlotStyles = chkPlotWithPlotStyles.Value<br/>&nbsp;&nbsp;&nbsp; chkPlotWithLineweights.Enabled = Not (chkPlotWithPlotStyles.Value)<br/>&nbsp;&nbsp;&nbsp; '设置是否打印对象线宽<br/>&nbsp;&nbsp;&nbsp; If Not objPlotConfiguration.PlotWithPlotStyles Then _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotWithLineweights = chkPlotWithLineweights.Value<br/>&nbsp;&nbsp;&nbsp; '设置是否隐藏图纸空间对象<br/>&nbsp;&nbsp;&nbsp; If Not objPlotConfiguration.ModelType Then objPlotConfiguration.PlotHidden = chkPlotHidden.Value<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '设置打印类型<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotType = acWindow<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '设置图纸打印份数<br/>&nbsp;&nbsp;&nbsp; objPlot.NumberOfCopies = txtNumber.Value<br/>&nbsp;&nbsp;&nbsp; '将打印错误报告切换为静默错误模式,以便不间断地执行打印任务<br/>&nbsp;&nbsp;&nbsp; objPlot.QuietErrorMode = True</p><p>End Sub</p><p>Private Sub BatchPlotByBlock(strBlockReferenceName As String)<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; '如果列表框中未存在任何元素<br/>&nbsp;&nbsp;&nbsp; If lstPlotFiles.ListCount = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请先向列表框中添加文件!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '将控制权交给AutoCAD<br/>&nbsp;&nbsp;&nbsp; frmBatchPlot.Hide<br/>&nbsp;&nbsp;&nbsp; ' 对第i个图形的每一个打印区域进行打印<br/>&nbsp;&nbsp;&nbsp; Dim ptMin As Variant, ptMax As Variant<br/>&nbsp;&nbsp;&nbsp; Dim ent As AcadEntity<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, j As Integer, n As Integer<br/>&nbsp;&nbsp;&nbsp; For i = 0 To lstPlotFiles.ListCount - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '检查文件是否存在<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Len(Dir(lstPlotFiles.List(i))) = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "文件" &amp; lstPlotFiles.List(i) &amp; "不存在!"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '打开或激活第i个图形文件<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call OpenFile(lstPlotFiles.List(i))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objDoc = ThisDrawing.Application.ActiveDocument<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '实现范围缩放<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThisDrawing.Application.ZoomExtents<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 确保当前布局是模型空间<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objLayout = objDoc.Layouts.Item("Model")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objPlot = objDoc.Plot<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置打印选项<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SetPlotConfiguration<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 将打印设置应用到当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objLayout.CopyFrom objPlotConfiguration<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '重新生成当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objDoc.Regen acAllViewports<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 确保AutoCAD在前台进行打印,这样后一次打印会在前一次打印完成之后才开始,避免出现错误<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objDoc.SetVariable "BACKGROUNDPLOT", 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '对当前图形模型空间中的所有打印区域进行打印<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim SSet As AcadSelectionSet<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用选择集获得对象集合<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SelectByBlock(strBlockReferenceName, SSet)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim objCollection() As AcadEntity<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim objCollection(SSet.count - 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To SSet.count - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(j) = SSet.Item(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 删除选择集<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SSet.Delete<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置图纸打印顺序<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If optSortZ.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '按坐标对图框排序(左右,上下:y坐标从大到小,x坐标从小到大)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SortZ(objCollection())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '按坐标对图框排序(上下,左右:x坐标从小到大,y坐标从大到小)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SortN(objCollection())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 若选择倒序<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkSort.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To UBound(objCollection) / 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set ent = objCollection(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(j) = objCollection(UBound(objCollection) - j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(UBound(objCollection) - j) = ent<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '对选择集中每个对象进行打印或预览<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To UBound(objCollection)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得每个对象最小包围框的两个角点<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objCollection(j).GetBoundingBox ptMin, ptMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将世界坐标(WCS)转换为显示坐标(DCS)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim PtMax_UCS As Variant<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim PtMin_UCS As Variant<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PtMax_UCS = ThisDrawing.Utility.TranslateCoordinates(ptMax, acWorld, acDisplayDCS, False)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PtMin_UCS = ThisDrawing.Utility.TranslateCoordinates(ptMin, acWorld, acDisplayDCS, False)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将三维点转化为二维点坐标<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve PtMin_UCS(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve PtMax_UCS(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置打印窗口(为显示坐标DCS)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objLayout.SetWindowToPlot PtMax_UCS, PtMin_UCS</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 打印当前的区域<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '若选中“打印到文件”<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkPlotToFile.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlot.PlotToFile cboPlotPath.Text &amp; objDoc.name &amp; "-" &amp; n &amp; ".dwf"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = n + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlot.PlotToDevice objLayout.ConfigName<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 恢复系统变量的值<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objDoc.SetVariable "BACKGROUNDPLOT", 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '保存当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'objDoc.Save<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '关闭但不保存当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '保证至少一个文件打开<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ThisDrawing.Application.Documents.count &gt; 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objDoc.Close False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; '显示对话框<br/>&nbsp;&nbsp;&nbsp; frmBatchPlot.Show<br/>End Sub</p><p>Private Sub BatchPlotByLayer(strLayerName As String)<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; '如果列表框中未存在任何元素<br/>&nbsp;&nbsp;&nbsp; If lstPlotFiles.ListCount = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请先向列表框中添加文件!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '将控制权交给AutoCAD<br/>&nbsp;&nbsp;&nbsp; frmBatchPlot.Hide<br/>&nbsp;&nbsp;&nbsp; ' 对第i个图形的每一个打印区域进行打印<br/>&nbsp;&nbsp;&nbsp; Dim ptMin As Variant, ptMax As Variant<br/>&nbsp;&nbsp;&nbsp; Dim ent As AcadEntity<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, j As Integer, n As Integer<br/>&nbsp;&nbsp;&nbsp; For i = 0 To lstPlotFiles.ListCount - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '检查文件是否存在<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Len(Dir(lstPlotFiles.List(i))) = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "文件" &amp; lstPlotFiles.List(i) &amp; "不存在!"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '打开或激活第i个图形文件<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call OpenFile(lstPlotFiles.List(i))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objDoc = ThisDrawing.Application.ActiveDocument<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '实现范围缩放<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThisDrawing.Application.ZoomExtents<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 确保当前布局是模型空间<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objLayout = objDoc.Layouts.Item("Model")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objPlot = objDoc.Plot<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置打印选项<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SetPlotConfiguration<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 将打印设置应用到当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objLayout.CopyFrom objPlotConfiguration<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '重新生成当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objDoc.Regen acAllViewports<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 确保AutoCAD在前台进行打印,这样后一次打印会在前一次打印完成之后才开始,避免出现错误<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objDoc.SetVariable "BACKGROUNDPLOT", 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '对当前图形模型空间中的所有打印区域进行打印<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim SSet As AcadSelectionSet<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用选择集获得对象集合<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SelectByLayer(strLayerName, SSet)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim objCollection() As AcadEntity<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim objCollection(SSet.count - 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To SSet.count - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(j) = SSet.Item(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 删除选择集<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SSet.Delete<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置图纸打印顺序<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If optSortZ.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '按坐标对图框排序(左右,上下:y坐标从大到小,x坐标从小到大)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SortZ(objCollection())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '按坐标对图框排序(上下,左右:x坐标从小到大,y坐标从大到小)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SortN(objCollection())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 若选择倒序<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkSort.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To UBound(objCollection) / 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set ent = objCollection(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(j) = objCollection(UBound(objCollection) - j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(UBound(objCollection) - j) = ent<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '对选择集中每个对象进行打印或预览<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To UBound(objCollection)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得每个对象最小包围框的两个角点<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objCollection(j).GetBoundingBox ptMin, ptMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将世界坐标(WCS)转换为显示坐标(DCS)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim PtMax_UCS As Variant<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim PtMin_UCS As Variant<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PtMax_UCS = ThisDrawing.Utility.TranslateCoordinates(ptMax, acWorld, acDisplayDCS, False)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PtMin_UCS = ThisDrawing.Utility.TranslateCoordinates(ptMin, acWorld, acDisplayDCS, False)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将三维点转化为二维点坐标<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve PtMin_UCS(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve PtMax_UCS(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置打印窗口(为显示坐标DCS)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objLayout.SetWindowToPlot PtMax_UCS, PtMin_UCS</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 打印当前的区域<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '若选中“打印到文件”<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkPlotToFile.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlot.PlotToFile cboPlotPath.Text &amp; objDoc.name &amp; "-" &amp; n &amp; ".dwf"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = n + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlot.PlotToDevice objLayout.ConfigName<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 恢复系统变量的值<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objDoc.SetVariable "BACKGROUNDPLOT", 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '保存当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'objDoc.Save<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '关闭但不保存当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '保证至少一个文件打开<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ThisDrawing.Application.Documents.count &gt; 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objDoc.Close False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; '显示对话框<br/>&nbsp;&nbsp;&nbsp; frmBatchPlot.Show<br/>End Sub</p><p>Private Sub PreviewByBlock(strBlockReferenceName As String)<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; '如果列表框中未存在任何元素<br/>&nbsp;&nbsp;&nbsp; If lstPlotFiles.ListCount = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请先向列表框中添加文件!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '将控制权交给AutoCAD<br/>&nbsp;&nbsp;&nbsp; frmBatchPlot.Hide<br/>&nbsp;&nbsp;&nbsp; ' 对第一个图形的第一个打印区域进行完全预览<br/>&nbsp;&nbsp;&nbsp; Dim ptMin As Variant, ptMax As Variant<br/>&nbsp;&nbsp;&nbsp; Dim ent As AcadEntity<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, j As Integer, n As Integer<br/>&nbsp;&nbsp;&nbsp; For i = 0 To lstPlotFiles.ListCount - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '检查文件是否存在<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Len(Dir(lstPlotFiles.List(i))) = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "文件" &amp; lstPlotFiles.List(i) &amp; "不存在!"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '打开或激活第i个图形文件<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call OpenFile(lstPlotFiles.List(i))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objDoc = ThisDrawing.Application.ActiveDocument<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '实现范围缩放<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThisDrawing.Application.ZoomExtents<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 确保当前布局是模型空间<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objLayout = objDoc.Layouts.Item("Model")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objPlot = objDoc.Plot<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置打印选项<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SetPlotConfiguration<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 将打印设置应用到当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objLayout.CopyFrom objPlotConfiguration<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '重新生成当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objDoc.Regen acAllViewports<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '对当前图形模型空间中的所有打印区域进行完全预览<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim SSet As AcadSelectionSet<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用选择集获得对象集合<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SelectByBlock(strBlockReferenceName, SSet)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim objCollection() As AcadEntity<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim objCollection(SSet.count - 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To SSet.count - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(j) = SSet.Item(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 删除选择集<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SSet.Delete<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置图纸打印顺序<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If optSortZ.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '按坐标对图框排序(左右,上下:y坐标从大到小,x坐标从小到大)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SortZ(objCollection())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '按坐标对图框排序(上下,左右:x坐标从小到大,y坐标从大到小)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SortN(objCollection())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 若选择倒序<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkSort.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To UBound(objCollection) / 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set ent = objCollection(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(j) = objCollection(UBound(objCollection) - j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(UBound(objCollection) - j) = ent<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '对选择集中每个对象进行打印或预览<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To UBound(objCollection)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得每个对象最小包围框的两个角点<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objCollection(j).GetBoundingBox ptMin, ptMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将世界坐标(WCS)转换为显示坐标(DCS)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim PtMax_UCS As Variant<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim PtMin_UCS As Variant<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PtMax_UCS = ThisDrawing.Utility.TranslateCoordinates(ptMax, acWorld, acDisplayDCS, False)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PtMin_UCS = ThisDrawing.Utility.TranslateCoordinates(ptMin, acWorld, acDisplayDCS, False)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将三维点转化为二维点坐标<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve PtMin_UCS(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve PtMax_UCS(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置打印窗口(为显示坐标DCS)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objLayout.SetWindowToPlot PtMax_UCS, PtMin_UCS</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '完全预览当前的区域<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlot.DisplayPlotPreview acFullPreview<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = n + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If n &gt; 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '恢复原来的打印设置<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objLayout.CopyFrom objOriginalPC<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '显示对话框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frmBatchPlot.Show<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '无打印区域时显示对话框<br/>&nbsp;&nbsp;&nbsp; MsgBox "选定图形中无打印区域!", vbCritical<br/>&nbsp;&nbsp;&nbsp; '恢复原来的打印设置<br/>&nbsp;&nbsp;&nbsp; objLayout.CopyFrom objOriginalPC<br/>&nbsp;&nbsp;&nbsp; '显示对话框<br/>&nbsp;&nbsp;&nbsp; frmBatchPlot.Show<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub PreviewByLayer(strLayerName As String)<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; '如果列表框中未存在任何元素<br/>&nbsp;&nbsp;&nbsp; If lstPlotFiles.ListCount = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "请先向列表框中添加文件!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '将控制权交给AutoCAD<br/>&nbsp;&nbsp;&nbsp; frmBatchPlot.Hide<br/>&nbsp;&nbsp;&nbsp; ' 对第i个图形的每一个打印区域进行打印<br/>&nbsp;&nbsp;&nbsp; Dim ptMin As Variant, ptMax As Variant<br/>&nbsp;&nbsp;&nbsp; Dim ent As AcadEntity<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, j As Integer, n As Integer<br/>&nbsp;&nbsp;&nbsp; For i = 0 To lstPlotFiles.ListCount - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '检查文件是否存在<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Len(Dir(lstPlotFiles.List(i))) = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "文件" &amp; lstPlotFiles.List(i) &amp; "不存在!"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '打开或激活第i个图形文件<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call OpenFile(lstPlotFiles.List(i))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objDoc = ThisDrawing.Application.ActiveDocument<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '实现范围缩放<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThisDrawing.Application.ZoomExtents<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 确保当前布局是模型空间<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objLayout = objDoc.Layouts.Item("Model")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objPlot = objDoc.Plot<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置打印选项<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SetPlotConfiguration<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 将打印设置应用到当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objLayout.CopyFrom objPlotConfiguration<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '重新生成当前图形<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objDoc.Regen acAllViewports<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '对当前图形模型空间中的所有打印区域进行完全预览<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim SSet As AcadSelectionSet<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用选择集获得对象集合<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SelectByLayer(strLayerName, SSet)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim objCollection() As AcadEntity<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim objCollection(SSet.count - 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To SSet.count - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(j) = SSet.Item(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 删除选择集<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SSet.Delete<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置图纸打印顺序<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If optSortZ.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '按坐标对图框排序(左右,上下:y坐标从大到小,x坐标从小到大)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SortZ(objCollection())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '按坐标对图框排序(上下,左右:x坐标从小到大,y坐标从大到小)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SortN(objCollection())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 若选择倒序<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkSort.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To UBound(objCollection) / 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set ent = objCollection(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(j) = objCollection(UBound(objCollection) - j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(UBound(objCollection) - j) = ent<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '对选择集中每个对象进行打印或预览<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To UBound(objCollection)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得每个对象最小包围框的两个角点<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objCollection(j).GetBoundingBox ptMin, ptMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将世界坐标(WCS)转换为显示坐标(DCS)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim PtMax_UCS As Variant<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim PtMin_UCS As Variant<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PtMax_UCS = ThisDrawing.Utility.TranslateCoordinates(ptMax, acWorld, acDisplayDCS, False)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PtMin_UCS = ThisDrawing.Utility.TranslateCoordinates(ptMin, acWorld, acDisplayDCS, False)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将三维点转化为二维点坐标<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve PtMin_UCS(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve PtMax_UCS(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置打印窗口(为显示坐标DCS)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objLayout.SetWindowToPlot PtMax_UCS, PtMin_UCS</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '完全预览当前的区域<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlot.DisplayPlotPreview acFullPreview<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = n + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If n &gt; 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '恢复原来的打印设置<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objLayout.CopyFrom objOriginalPC<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '显示对话框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frmBatchPlot.Show<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '无打印区域时显示对话框<br/>&nbsp;&nbsp;&nbsp; MsgBox "选定图形中无打印区域!", vbCritical<br/>&nbsp;&nbsp;&nbsp; '恢复原来的打印设置<br/>&nbsp;&nbsp;&nbsp; objLayout.CopyFrom objOriginalPC<br/>&nbsp;&nbsp;&nbsp; '显示对话框<br/>&nbsp;&nbsp;&nbsp; frmBatchPlot.Show<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Public Function ReturnFolder(lngHwnd As Long) As String<br/>&nbsp;&nbsp;&nbsp; Dim Browser As BrowseInfo<br/>&nbsp;&nbsp;&nbsp; Dim lngFolder As Long<br/>&nbsp;&nbsp;&nbsp; Dim strPath As String<br/>&nbsp;&nbsp;&nbsp; Dim strTemp As String<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; With Browser<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .hOwner = lngHwnd<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .lpszTitle = "选择工作路径"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .pszDisplayName = String(MAX_PATH, 0)<br/>&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '用空格填充字符串<br/>&nbsp;&nbsp;&nbsp; strPath = String(MAX_PATH, 0)<br/>&nbsp;&nbsp;&nbsp; '调用API函数显示文件夹列表<br/>&nbsp;&nbsp;&nbsp; lngFolder = SHBrowseForFolder(Browser)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '使用API函数获取返回的路径<br/>&nbsp;&nbsp;&nbsp; If lngFolder Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SHGetPathFromIDList lngFolder, strPath<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = Left(strPath, InStr(strPath, vbNullChar) - 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If (Right(strTemp, 1) &lt;&gt; "\") Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = strTemp &amp; "\"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReturnFolder = strTemp<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Function</p><p>Public Sub FindFile(ByRef files As Collection, strDir, strExt)<br/>&nbsp;&nbsp;&nbsp; '删除集合中所有的对象<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp; For i = 1 To files.count<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; files.Remove 1<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '查找dwg文件,并将其添加到集合中<br/>&nbsp;&nbsp;&nbsp; Dim strFileName As String<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; If (Right(strDir, 1) &lt;&gt; "\") Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strDir = strDir &amp; "\"<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; strFileName = Dir(strDir &amp; "*.*", vbDirectory)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Do While (strFileName &lt;&gt; "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If (UCase(Right(strFileName, 3)) = UCase(strExt)) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; files.Add strDir &amp; strFileName<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strFileName = Dir&nbsp;&nbsp; '返回下一个符合条件的文件<br/>&nbsp;&nbsp;&nbsp; Loop<br/>End Sub</p><p>Public Function AddToList(objBox As ListBox, Names As Collection) As Boolean<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp; On Error GoTo Error_Control<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; objBox.Clear<br/>&nbsp;&nbsp;&nbsp; '将集合中的对象添加到列表框中<br/>&nbsp;&nbsp;&nbsp; For i = 1 To Names.count<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objBox.AddItem Names(i)<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>Exit_Here:<br/>&nbsp;&nbsp;&nbsp; AddToList = True<br/>&nbsp;&nbsp;&nbsp; Exit Function<br/>&nbsp;&nbsp;&nbsp; <br/>Error_Control:<br/>&nbsp;&nbsp;&nbsp; MsgBox "发生下面的错误:" &amp; Err.Number<br/>&nbsp;&nbsp;&nbsp; AddToList = False<br/>End Function</p><p>Private Function HasItem(objBox As ListBox, strFlies As String) As Boolean<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '检查路径是否已经存在<br/>&nbsp;&nbsp;&nbsp; HasItem = False<br/>&nbsp; <br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp; If objBox.ListCount &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 0 To objBox.ListCount - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If StrComp(objBox.List(i), strFlies, vbTextCompare) = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HasItem = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Function<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Function</p><p>Private Function HasItem2(ByVal strPath As String) As Integer<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '检查路径是否已经存在<br/>&nbsp;&nbsp;&nbsp; HasItem2 = -1<br/>&nbsp; <br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp; If cboPlotPath.ListCount &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 0 To cboPlotPath.ListCount - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If StrComp(cboPlotPath.List(i), strPath, vbTextCompare) = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HasItem2 = i<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Function<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Function</p><p>'打开或激活文件<br/>Private Sub OpenFile(fileName As String)<br/>&nbsp;&nbsp;&nbsp; Dim dwgFile&nbsp; As AcadDocument<br/>&nbsp;&nbsp;&nbsp; Dim strFile&nbsp; As String<br/>&nbsp;&nbsp;&nbsp; For Each dwgFile In ThisDrawing.Application.Documents<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strFile = dwgFile.Path &amp; "\" &amp; dwgFile.name<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '若第i个图形文件已经被打开,则将其激活<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If strFile = fileName Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '若dwgFile尚未激活,则将其激活<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If dwgFile.Active = False Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThisDrawing.Application.ActiveDocument = dwgFile<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; '若第i个图形文件尚未被打开,则将其打开<br/>&nbsp;&nbsp;&nbsp; ThisDrawing.Application.Documents.Open fileName<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>' 显示AutoCAD中当前可用的打印机列表<br/>Public Sub ListPlotDeviceNames()<br/>&nbsp;&nbsp;&nbsp; '取得当前布局对象<br/>&nbsp;&nbsp;&nbsp; Set objLayout = ThisDrawing.ActiveLayout<br/>&nbsp;&nbsp;&nbsp; '取得当前打印机配置信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.ConfigName = objLayout.ConfigName<br/>&nbsp;&nbsp;&nbsp; '刷新这个工作任务当前的打印信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.RefreshPlotDeviceInfo<br/>&nbsp;&nbsp;&nbsp; '列出系统上所有有效的设备名称<br/>&nbsp;&nbsp;&nbsp; Dim plotDevices&nbsp; As Variant<br/>&nbsp;&nbsp;&nbsp; plotDevices = objPlotConfiguration.GetPlotDeviceNames<br/>&nbsp;&nbsp;&nbsp; '删除以前的打印机列表<br/>&nbsp;&nbsp;&nbsp; cboPrintersName.Clear<br/>&nbsp;&nbsp;&nbsp; '显示打印机列表<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp; For i = 0 To UBound(plotDevices)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboPrintersName.AddItem (plotDevices(i))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置默认的显示项目<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If objPlotConfiguration.ConfigName = plotDevices(i) Then cboPrintersName.ListIndex = i<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; '设置组合框初始选项<br/>&nbsp;&nbsp;&nbsp; With cboPrintersName<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用下拉列表的形式<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Style = fmStyleDropDownList<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置默认的显示项目<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If .ListIndex = -1 Then .ListIndex = 0<br/>&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>' 显示AutoCAD中当前可用的图纸尺寸<br/>Public Sub ListPaperSize()<br/>&nbsp;&nbsp;&nbsp; '取得当前布局对象<br/>&nbsp;&nbsp;&nbsp; Set objLayout = ThisDrawing.ActiveLayout<br/>&nbsp;&nbsp;&nbsp; If cboPrintersName.Text = objLayout.ConfigName Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '取得当用图纸尺寸<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.CanonicalMediaName = objLayout.CanonicalMediaName<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; '刷新打印设备信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.RefreshPlotDeviceInfo<br/>&nbsp;&nbsp;&nbsp; '列出所有介质的名称以及它们的本地版本<br/>&nbsp;&nbsp;&nbsp; paperSizes = objPlotConfiguration.GetCanonicalMediaNames<br/>&nbsp;&nbsp;&nbsp; '删除以前的图纸尺寸列表<br/>&nbsp;&nbsp;&nbsp; cboPaperSize.Clear<br/>&nbsp;&nbsp;&nbsp; '显示图纸尺寸列表<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp; For i = 0 To UBound(paperSizes)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboPaperSize.AddItem objPlotConfiguration.GetLocaleMediaName(paperSizes(i))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置默认的显示项目<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If objPlotConfiguration.CanonicalMediaName = paperSizes(i) Then cboPaperSize.ListIndex = i<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '设置组合框初始选项<br/>&nbsp;&nbsp;&nbsp; With cboPaperSize<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用下拉列表的形式<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Style = fmStyleDropDownList<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置默认的显示项目<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If .ListIndex = -1 Then .ListIndex = 0<br/>&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>' 显示AutoCAD中当前可用的打印样式<br/>Public Sub ListPlotStyleTableNames()<br/>&nbsp;&nbsp;&nbsp; '取得当前布局对象<br/>&nbsp;&nbsp;&nbsp; Set objLayout = ThisDrawing.ActiveLayout<br/>&nbsp;&nbsp;&nbsp; '取得当前打印样式<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.StyleSheet = objLayout.StyleSheet<br/>&nbsp;&nbsp;&nbsp; '刷新打印设备信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.RefreshPlotDeviceInfo<br/>&nbsp;&nbsp;&nbsp; ' 获得所有的可用打印样式<br/>&nbsp;&nbsp;&nbsp; Dim plotStyleTables&nbsp; As Variant<br/>&nbsp;&nbsp;&nbsp; plotStyleTables = objPlotConfiguration.GetPlotStyleTableNames<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ' 删除以前的打印样式列表<br/>&nbsp;&nbsp;&nbsp; cboPlotStyleTableNames.Clear<br/>&nbsp;&nbsp;&nbsp; ' 添加打印样式列表<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp; Dim str As String<br/>&nbsp;&nbsp;&nbsp; For i = 0 To UBound(plotStyleTables)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = plotStyleTables(i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call AddSorted(cboPlotStyleTableNames, str)<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '设置默认的显示项目<br/>&nbsp;&nbsp;&nbsp; For i = 0 To UBound(plotStyleTables)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = plotStyleTables(i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If cboPlotStyleTableNames.List(i) = objPlotConfiguration.StyleSheet Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboPlotStyleTableNames.ListIndex = i<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ' 设置组合框初始选项<br/>&nbsp;&nbsp;&nbsp; With cboPlotStyleTableNames<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用下拉列表的形式<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Style = fmStyleDropDownList<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置默认的显示项目<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If .ListIndex = -1 Then .ListIndex = 0<br/>&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>' 显示AutoCAD中可以使用的打印比例<br/>Public Sub ListPlotScale()<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp; '定义图纸尺寸数组<br/>&nbsp;&nbsp;&nbsp; Dim P, Nu, De, Q1, Q2<br/>&nbsp;&nbsp;&nbsp; '定义图纸尺寸数组<br/>&nbsp;&nbsp;&nbsp; P = Array("自定义", "按图纸空间缩放", "1:1", "1:2", "1:4", "1:8", "1:10", "1:16", "1:20", "1:30", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "1:40", "1:50", "1:100", "2:1", "4:1", "8:1", "10:1", "100:1", "1/128""= 1'", "1/64""= 1'", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "1/32""= 1'", "1/16""= 1'", "3/32""= 1'", "1/8""= 1'", "3/16""= 1'", "1/4""= 1'", "3/8""= 1'", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "1/2""= 1'", "3/4""= 1'", "1""= 1'", "3""= 1'", "6""= 1'", "1'= 1'")<br/>&nbsp;&nbsp;&nbsp; '定义分子数组<br/>&nbsp;&nbsp;&nbsp; Nu = Array(" ", "", "1", "1", "1", "1", "1", "1", "1", "1", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "1", "1", "1")<br/>&nbsp;&nbsp;&nbsp; '定义分母数组<br/>&nbsp;&nbsp;&nbsp; De = Array(" ", "", "1", "2", "4", "8", "10", "16", "20", "30", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "40", "50", "100", "0.5", "0.25", "0.125", "0.1", "0.01", "1536", "768", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "384", "192", "128", "96", "64", "48", "32", "24", "16", "12", _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "4", "2", "1")<br/>&nbsp;&nbsp;&nbsp; '定义组合框索引到打印比例枚举值的映射<br/>&nbsp;&nbsp;&nbsp; Q1 = Array(100, 0, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)<br/>&nbsp;&nbsp;&nbsp; '定义打印比例枚举值到组合框索引的映射<br/>&nbsp;&nbsp;&nbsp; Q2 = Array(1, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 100)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '取得当前布局对象<br/>&nbsp;&nbsp;&nbsp; Set objLayout = ThisDrawing.ActiveLayout<br/>&nbsp;&nbsp;&nbsp; '取得当前打印比例<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.UseStandardScale = objLayout.UseStandardScale<br/>&nbsp;&nbsp;&nbsp; ' 显示打印比例列表<br/>&nbsp;&nbsp;&nbsp; With cboPlotScale<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 清空打印比例列表<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Clear<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 0 To 32<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .AddItem P(i), i<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用下拉列表的形式<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Style = fmStyleDropDownList<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置默认的显示项目<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not objPlotConfiguration.UseStandardScale Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用自定义比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ListIndex = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objLayout.GetCustomScale Numerator, Denominator<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.SetCustomScale Numerator, Denominator<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置文本框文本<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtNumerator.Text = Numerator<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtDenominator.Text = Denominator<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用标准比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.StandardScale = objLayout.StandardScale<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ListIndex = Q2(objPlotConfiguration.StandardScale)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If .ListIndex &gt; 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Numerator = Nu(cboPlotScale.ListIndex)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Denominator = De(cboPlotScale.ListIndex)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置文本框文本<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtNumerator.Text = Numerator<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtDenominator.Text = Denominator<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '计算缩放比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call SetScaleToFit<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;<br/>End Sub</p><p>Public Sub SetScaleToFit()<br/>&nbsp;&nbsp;&nbsp; Dim PaperWidth As Double, PaperHeight As Double, t As Double<br/>&nbsp;&nbsp;&nbsp; Dim PlotWidth As Double, PlotHeight As Double<br/>&nbsp;&nbsp;&nbsp; Dim WindowWidth As Double, WindowHeight As Double<br/>&nbsp;&nbsp;&nbsp; Dim MarginLowerLeft As Variant, MarginUpperRight As Variant<br/>&nbsp;&nbsp;&nbsp; Dim WindowLowerLeft As Variant, WindowUpperRight As Variant<br/>&nbsp;&nbsp;&nbsp; '刷新打印设备信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.RefreshPlotDeviceInfo<br/>&nbsp;&nbsp;&nbsp; '取得图纸尺寸信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.GetPaperSize PaperWidth, PaperHeight<br/>&nbsp;&nbsp;&nbsp; '取得图纸边界信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.GetPaperMargins MarginLowerLeft, MarginUpperRight<br/>&nbsp;&nbsp;&nbsp; '计算打印区域<br/>&nbsp;&nbsp;&nbsp; PlotWidth = PaperWidth - (MarginUpperRight(0) + MarginLowerLeft(0))<br/>&nbsp;&nbsp;&nbsp; PlotHeight = PaperHeight - (MarginUpperRight(1) + MarginLowerLeft(1))<br/>&nbsp;&nbsp;&nbsp; '根据选择的图形方向调换宽高<br/>&nbsp;&nbsp;&nbsp; If optVertical.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '图形方向为“纵向”时宽小于高<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If PlotWidth &gt; PlotHeight Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = PlotWidth<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotWidth = PlotHeight<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotHeight = t<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '图形方向为“横向”时宽大于高<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If PlotWidth &lt; PlotHeight Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = PlotWidth<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotWidth = PlotHeight<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotHeight = t<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; '获得打印窗口<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.GetWindowToPlot WindowLowerLeft, WindowUpperRight<br/>&nbsp;&nbsp;&nbsp; WindowWidth = WindowUpperRight(0) - WindowLowerLeft(0)<br/>&nbsp;&nbsp;&nbsp; WindowHeight = WindowUpperRight(1) - WindowLowerLeft(1)<br/>&nbsp;&nbsp;&nbsp; '计算所需比例<br/>&nbsp;&nbsp;&nbsp; Dim ScaleX As Double, ScaleY As Double<br/>&nbsp;&nbsp;&nbsp; ScaleX = WindowWidth / PlotWidth<br/>&nbsp;&nbsp;&nbsp; ScaleY = WindowHeight / PlotHeight<br/>&nbsp;&nbsp;&nbsp; Numerator = 1<br/>&nbsp;&nbsp;&nbsp; Denominator = IIf(ScaleX &gt; ScaleY, ScaleX, ScaleY)<br/>&nbsp;&nbsp;&nbsp; Dim d As Double<br/>&nbsp;&nbsp;&nbsp; '单位由“毫米”转换为“英寸”<br/>&nbsp;&nbsp;&nbsp; d = IIf(optMillimeters.Value, Denominator, Denominator * 25.4)<br/>&nbsp;&nbsp;&nbsp; '设置文本框文本<br/>&nbsp;&nbsp;&nbsp; txtNumerator.Text = Numerator<br/>&nbsp;&nbsp;&nbsp; txtDenominator.Text = Format(d, "#########0.###")<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>' 显示AutoCAD中当前可用的图层<br/>Public Sub ListLayer()<br/>&nbsp;&nbsp;&nbsp; Dim LayerList As Collection<br/>&nbsp;&nbsp;&nbsp; '获得图形中存在的图层列表<br/>&nbsp;&nbsp;&nbsp; Set LayerList = GetLayerList()<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '刷新图层列表<br/>&nbsp;&nbsp;&nbsp; Call RefreshList(cboLayerName, LayerList)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '选择图层列表中的第一个实体<br/>&nbsp;&nbsp;&nbsp; If cboLayerName.ListIndex = -1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboLayerName.ListIndex = 0<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>'获得图形中存在的图层列表<br/>Private Function GetLayerList() As Collection<br/>&nbsp;&nbsp;&nbsp; Dim objLayer As AcadLayer<br/>&nbsp;&nbsp;&nbsp; Dim LayerList As New Collection<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Set objDoc = ThisDrawing.Application.ActiveDocument<br/>&nbsp;&nbsp;&nbsp; '获得可用的图层<br/>&nbsp;&nbsp;&nbsp; For Each objLayer In objDoc.Layers<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LayerList.Add objLayer.name, objLayer.name<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '返回图形中块参照的列表<br/>&nbsp;&nbsp;&nbsp; Set GetLayerList = LayerList<br/>&nbsp;&nbsp;&nbsp; <br/>End Function</p><p>' 显示AutoCAD中当前可用的图块<br/>Public Sub ListBlock()<br/>&nbsp;&nbsp;&nbsp; Dim BlockReferenceList As Collection<br/>&nbsp;&nbsp;&nbsp; '获得图形中存在的块参照列表<br/>&nbsp;&nbsp;&nbsp; Set BlockReferenceList = GetBlockReferences()<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '判断是否存在块参照<br/>&nbsp;&nbsp;&nbsp; If BlockReferenceList Is Nothing Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "当前图形中不存在任何的块!", vbExclamation<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '刷新块参照列表<br/>&nbsp;&nbsp;&nbsp; Call RefreshList(cboBlockName, BlockReferenceList)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '选择块参照列表中的第一个实体<br/>&nbsp;&nbsp;&nbsp; If cboBlockName.ListIndex = -1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cboBlockName.ListIndex = 0<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>'获得图形中存在的块参照列表<br/>Private Function GetBlockReferences() As Collection<br/>&nbsp;&nbsp;&nbsp; Dim BlockList As New Collection<br/>&nbsp;&nbsp;&nbsp; Dim AcadObject As AcadEntity<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Set objDoc = ThisDrawing.Application.ActiveDocument<br/>&nbsp;&nbsp;&nbsp; '获得可用的块参照<br/>&nbsp;&nbsp;&nbsp; For Each AcadObject In objDoc.ModelSpace<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If AcadObject.ObjectName = "AcDbBlockReference" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '不将模型空间、图纸空间和匿名块添加到组合框中<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If StrComp(Left(AcadObject.name, 1), "*") &lt;&gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BlockList.Add AcadObject.name, AcadObject.name<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '返回图形中块参照的列表<br/>&nbsp;&nbsp;&nbsp; If BlockList.count &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set GetBlockReferences = BlockList<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set GetBlockReferences = Nothing<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Function</p><p>'将组合对象中的元素写入列表框或组合框中<br/>Private Sub RefreshList(ByRef ListObject As Object, ByRef BlockList As Collection)<br/>&nbsp;&nbsp;&nbsp; Dim i As Long<br/>&nbsp;&nbsp;&nbsp; '清空列表框<br/>&nbsp;&nbsp;&nbsp; ListObject.Clear<br/>&nbsp;&nbsp;&nbsp; '向列表框中添加新的元素<br/>&nbsp;&nbsp;&nbsp; For i = 1 To BlockList.count<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddSorted ListObject, BlockList(i)<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub AddSorted(ListObject As Object, SItem As String)<br/>&nbsp;&nbsp;&nbsp; '将元素添加到组合框或列表框中,并且排序<br/>&nbsp;&nbsp;&nbsp; Dim i As Long<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '元素数目小于1,不进行排序<br/>&nbsp;&nbsp;&nbsp; If ListObject.ListCount = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListObject.AddItem SItem<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '通过比较确定该元素的位置,类似于插入排序法<br/>&nbsp;&nbsp;&nbsp; For i = 0 To (ListObject.ListCount - 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If StrComp(ListObject.List(i), SItem, vbTextCompare) = 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListObject.AddItem SItem, i<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '添加到列表框的最后<br/>&nbsp;&nbsp;&nbsp; ListObject.AddItem SItem</p><p>End Sub</p><p>Public Sub PaperRotationChange()<br/>&nbsp;&nbsp;&nbsp; ' 设置图纸打印方向<br/>&nbsp;&nbsp;&nbsp; If optVertical.Value = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkReverse.Value = False Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotRotation = ac0degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotRotation = ac180degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If chkReverse.Value = False Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotRotation = ac90degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objPlotConfiguration.PlotRotation = ac270degrees<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; ' 显示图纸大小<br/>&nbsp;&nbsp;&nbsp; Call SetPlotZone<br/>End Sub</p><p>' 设置图纸可打印区域大小<br/>Public Sub SetPlotZone()<br/>&nbsp;&nbsp;&nbsp; Dim PaperWidth As Double, PaperHeight As Double, t As Double<br/>&nbsp;&nbsp;&nbsp; Dim PlotWidth As Double, PlotHeight As Double<br/>&nbsp;&nbsp;&nbsp; Dim MarginLowerLeft As Variant, MarginUpperRight As Variant<br/>&nbsp;&nbsp;&nbsp; '刷新打印设备信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.RefreshPlotDeviceInfo<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '取得图纸尺寸信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.GetPaperSize PaperWidth, PaperHeight<br/>&nbsp;&nbsp;&nbsp; '取得图纸边界信息<br/>&nbsp;&nbsp;&nbsp; objPlotConfiguration.GetPaperMargins MarginLowerLeft, MarginUpperRight<br/>&nbsp;&nbsp;&nbsp; '计算打印区域<br/>&nbsp;&nbsp;&nbsp; PlotWidth = PaperWidth - (MarginUpperRight(0) + MarginLowerLeft(0))<br/>&nbsp;&nbsp;&nbsp; PlotHeight = PaperHeight - (MarginUpperRight(1) + MarginLowerLeft(1))<br/>&nbsp;&nbsp;&nbsp; '根据选择的图形方向调换宽高<br/>&nbsp;&nbsp;&nbsp; If optVertical.Value Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '图形方向为“纵向”时宽小于高<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If PlotWidth &gt; PlotHeight Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = PlotWidth<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotWidth = PlotHeight<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotHeight = t<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '图形方向为“横向”时宽大于高<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If PlotWidth &lt; PlotHeight Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = PlotWidth<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotWidth = PlotHeight<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotHeight = t<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '单位由“毫米”转换为“英寸”<br/>&nbsp;&nbsp;&nbsp; If optMillimeters.Value = False Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotWidth = PlotWidth / 25.4<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlotHeight = PlotHeight / 25.4<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; ' 显示图纸大小<br/>&nbsp;&nbsp;&nbsp; lbPaperSize.Caption = Format(PlotWidth, "#########0.00") &amp; " × " &amp; Format(PlotHeight, "#########0.00")<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub OutputData(objBox As ComboBox, nFile As Integer)<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, count As Integer, index As Integer<br/>&nbsp;&nbsp;&nbsp; '获得组合框列表数目<br/>&nbsp;&nbsp;&nbsp; count = objBox.ListCount<br/>&nbsp;&nbsp;&nbsp; '获得组合框当前选项的的索引号<br/>&nbsp;&nbsp;&nbsp; index = objBox.ListIndex<br/>&nbsp;&nbsp;&nbsp; '输出组合框列表数目<br/>&nbsp;&nbsp;&nbsp; Write #nFile, count<br/>&nbsp;&nbsp;&nbsp; '输出组合框当前选项的的索引号<br/>&nbsp;&nbsp;&nbsp; Write #nFile, index<br/>&nbsp;&nbsp;&nbsp; '输出所有的组合框选项<br/>&nbsp;&nbsp;&nbsp; For i = 0 To count - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Print #nFile, objBox.List(i)<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub OutputData2(objBox As CheckBox, nFile As Integer)<br/>&nbsp;&nbsp;&nbsp; Dim strTemp As String<br/>&nbsp;&nbsp;&nbsp; '输出复选框选中状态<br/>&nbsp;&nbsp;&nbsp; If objBox.Value = True Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = "是"<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = "否"<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Print #nFile, strTemp<br/>End Sub</p><p>Private Sub OutputData3(objBox As ListBox, nFile As Integer)<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, count As Integer, index As Integer<br/>&nbsp;&nbsp;&nbsp; '获得列表框列表数目<br/>&nbsp;&nbsp;&nbsp; count = objBox.ListCount<br/>&nbsp;&nbsp;&nbsp; '获得列表框当前选项的的索引号<br/>&nbsp;&nbsp;&nbsp; index = objBox.ListIndex<br/>&nbsp;&nbsp;&nbsp; '输出列表框列表数目<br/>&nbsp;&nbsp;&nbsp; Write #nFile, count<br/>&nbsp;&nbsp;&nbsp; '输出列表框当前选项的的索引号<br/>&nbsp;&nbsp;&nbsp; Write #nFile, index<br/>&nbsp;&nbsp;&nbsp; '输出所有的列表框选项<br/>&nbsp;&nbsp;&nbsp; For i = 0 To count - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Print #nFile, objBox.List(i)<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub InputData(objBox As ComboBox, nFile As Integer)<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, count As Integer, index As Integer<br/>&nbsp;&nbsp;&nbsp; Dim strTemp As String<br/>&nbsp;&nbsp;&nbsp; '读入一行文本并存储在变量中<br/>&nbsp;&nbsp;&nbsp; Line Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '读入组合框列表数目<br/>&nbsp;&nbsp;&nbsp; Input #nFile, count<br/>&nbsp;&nbsp;&nbsp; '读入组合框当前元素的的索引号<br/>&nbsp;&nbsp;&nbsp; Input #nFile, index<br/>&nbsp;&nbsp;&nbsp; '清空组合框所有元素<br/>&nbsp;&nbsp;&nbsp; objBox.Clear<br/>&nbsp;&nbsp;&nbsp; '读入组合框元素<br/>&nbsp;&nbsp;&nbsp; For i = 0 To count - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Line Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将读入的列表添加到组合框中<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objBox.AddItem strTemp<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; ' 设置组合框初始选项<br/>&nbsp;&nbsp;&nbsp; With objBox<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使用下拉列表的形式<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Style = fmStyleDropDownList<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置下拉列表的下标下限<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .BoundColumn = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置默认的显示项目<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ListIndex = index<br/>&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub InputData2(objBox As CheckBox, nFile As Integer)<br/>&nbsp;&nbsp;&nbsp; Dim strTemp As String<br/>&nbsp;&nbsp;&nbsp; '读入一行文本并存储在变量中<br/>&nbsp;&nbsp;&nbsp; Line Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '读入复选框选中状态<br/>&nbsp;&nbsp;&nbsp; Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '设置复选按钮选择状态<br/>&nbsp;&nbsp;&nbsp; If strTemp = "是" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objBox.Value = True<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objBox.Value = False<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub InputData3(objBox As ListBox, nFile As Integer)<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, count As Integer, index As Integer<br/>&nbsp;&nbsp;&nbsp; Dim strTemp As String<br/>&nbsp;&nbsp;&nbsp; '读入一行文本并存储在变量中<br/>&nbsp;&nbsp;&nbsp; Line Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp; '读入列表框列表数目<br/>&nbsp;&nbsp;&nbsp; Input #nFile, count<br/>&nbsp;&nbsp;&nbsp; '读入列表框当前元素的的索引号<br/>&nbsp;&nbsp;&nbsp; Input #nFile, index<br/>&nbsp;&nbsp;&nbsp; '清空列表框所有元素<br/>&nbsp;&nbsp;&nbsp; objBox.Clear<br/>&nbsp;&nbsp;&nbsp; '读入列表框元素<br/>&nbsp;&nbsp;&nbsp; For i = 0 To count - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Line Input #nFile, strTemp<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将读入的列表添加到列表框中<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objBox.AddItem strTemp<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; ' 设置组合框初始选项<br/>&nbsp;&nbsp;&nbsp; With objBox<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置下拉列表的下标下限<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .BoundColumn = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置默认的显示项目<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ListIndex = index<br/>&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub SetSelected(ListObject As Object, SItem As String)<br/>&nbsp;&nbsp;&nbsp; '将该元素在组合框中置为当前<br/>&nbsp;&nbsp;&nbsp; Dim i As Long<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '通过比较确定该元素的位置<br/>&nbsp;&nbsp;&nbsp; For i = 0 To (ListObject.ListCount - 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If StrComp(ListObject.List(i), SItem, vbTextCompare) = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListObject.ListIndex = i<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next</p><p>End Sub</p><p>'使用选择集获得对象集合(按图层)<br/>Public Sub SelectByLayer(strLayerName As String, ByRef SSet As AcadSelectionSet)<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; Dim strSSetName As String<br/>&nbsp;&nbsp;&nbsp; strSSetName = "打印区域选择集"<br/>&nbsp;&nbsp;&nbsp; ' 安全创建选择集<br/>&nbsp;&nbsp;&nbsp; If Not IsNull(ThisDrawing.SelectionSets.Item(strSSetName)) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set SSet = ThisDrawing.SelectionSets.Item(strSSetName)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SSet.Delete<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Set SSet = ThisDrawing.SelectionSets.Add(strSSetName)<br/>&nbsp;&nbsp;&nbsp; ' 选择集过滤器<br/>&nbsp;&nbsp;&nbsp; Dim fType As Variant, fData As Variant<br/>&nbsp;&nbsp;&nbsp; ' 用CreateSSetFilter函数改进的过滤器<br/>&nbsp;&nbsp;&nbsp; Call CreateSSetFilter(fType, fData, 0, "LWPOLYLINE", 8, strLayerName)<br/>&nbsp;&nbsp;&nbsp; '选择指定图层的多段线<br/>&nbsp;&nbsp;&nbsp; SSet.Select acSelectionSetAll, , , fType, fData<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>'使用选择集获得对象集合(按块参照)<br/>Public Sub SelectByBlock(strBlockName As String, ByRef SSet As AcadSelectionSet)<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; Dim strSSetName As String<br/>&nbsp;&nbsp;&nbsp; strSSetName = "打印区域选择集"<br/>&nbsp;&nbsp;&nbsp; ' 安全创建选择集<br/>&nbsp;&nbsp;&nbsp; If Not IsNull(ThisDrawing.SelectionSets.Item(strSSetName)) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set SSet = ThisDrawing.SelectionSets.Item(strSSetName)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SSet.Delete<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Set SSet = ThisDrawing.SelectionSets.Add(strSSetName)<br/>&nbsp;&nbsp;&nbsp; ' 选择集过滤器<br/>&nbsp;&nbsp;&nbsp; Dim fType As Variant, fData As Variant<br/>&nbsp;&nbsp;&nbsp; ' 用CreateSSetFilter函数改进的过滤器<br/>&nbsp;&nbsp;&nbsp; Call CreateSSetFilter(fType, fData, 0, "INSERT", 2, strBlockName)<br/>&nbsp;&nbsp;&nbsp; '选择指定图层的多段线<br/>&nbsp;&nbsp;&nbsp; SSet.Select acSelectionSetAll, , , fType, fData<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>' 创建选择集过滤器<br/>Public Sub CreateSSetFilter(ByRef filterType As Variant, ByRef filterData As Variant, ParamArray filter())<br/>&nbsp;&nbsp;&nbsp; If UBound(filter) Mod 2 = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "filter参数无效!"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ' 过滤器规则<br/>&nbsp;&nbsp;&nbsp; Dim fType() As Integer<br/>&nbsp;&nbsp;&nbsp; ' 过滤器参数<br/>&nbsp;&nbsp;&nbsp; Dim fData() As Variant<br/>&nbsp;&nbsp;&nbsp; Dim count As Integer<br/>&nbsp;&nbsp;&nbsp; count = (UBound(filter) + 1) / 2<br/>&nbsp;&nbsp;&nbsp; ReDim fType(count - 1)<br/>&nbsp;&nbsp;&nbsp; ReDim fData(count - 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp; For i = 0 To count - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fType(i) = filter(2 * i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fData(i) = filter(2 * i + 1)<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; filterType = fType<br/>&nbsp;&nbsp;&nbsp; filterData = fData<br/>End Sub</p><p>'按坐标对图框排序(上下,左右:x坐标从小到大,y坐标从大到小)<br/>Public Function SortN(ByRef objCollection() As AcadEntity)</p><p>'选择集为空时退出函数<br/>If UBound(objCollection) = 0 Then<br/>&nbsp;&nbsp;&nbsp; Exit Function<br/>End If</p><p>Dim ent As AcadEntity<br/>Dim i As Integer, j As Integer<br/>Dim ptiMin As Variant, ptiMax As Variant<br/>Dim ptjMin As Variant, ptjMax As Variant</p><p>'容许误差<br/>Dim NumError As Double<br/>NumError = 0</p><p>'按x坐标排序<br/>For i = 0 To UBound(objCollection)<br/>&nbsp;&nbsp;&nbsp; For j = i + 1 To UBound(objCollection)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得每个对象最小包围框的两个角点<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objCollection(i).GetBoundingBox ptiMin, ptiMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objCollection(j).GetBoundingBox ptjMin, ptjMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将三维点转化为二维点坐标<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve ptiMin(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve ptjMin(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ptiMin(0) - ptjMin(0) &gt; NumError Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set ent = objCollection(i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(i) = objCollection(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(j) = ent<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next j<br/>Next i</p><p>'对x坐标相等的进行y坐标排序<br/>For i = 0 To UBound(objCollection)<br/>&nbsp;&nbsp;&nbsp; For j = 0 To UBound(objCollection)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得每个对象最小包围框的两个角点<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objCollection(i).GetBoundingBox ptiMin, ptiMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objCollection(j).GetBoundingBox ptjMin, ptjMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将三维点转化为二维点坐标<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve ptiMin(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve ptjMin(0 To 1)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ptiMin(0) = ptjMin(0) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ptiMin(1) - ptjMin(1) &gt; NumError Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set ent = objCollection(i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(i) = objCollection(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(j) = ent<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next j<br/>Next i</p><p>End Function</p><p>'按坐标对图框排序(左右,上下:y坐标从大到小,x坐标从小到大)<br/>Public Function SortZ(ByRef objCollection() As AcadEntity)</p><p>'选择集为空时退出函数<br/>If UBound(objCollection) = 0 Then<br/>&nbsp;&nbsp;&nbsp; Exit Function<br/>End If</p><p>Dim ent As AcadEntity<br/>Dim i As Integer, j As Integer<br/>Dim ptiMin As Variant, ptiMax As Variant<br/>Dim ptjMin As Variant, ptjMax As Variant</p><p>'容许误差<br/>Dim NumError As Double<br/>NumError = 0</p><p>'按y坐标排序<br/>For i = 0 To UBound(objCollection)<br/>&nbsp;&nbsp;&nbsp; For j = i + 1 To UBound(objCollection)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得每个对象最小包围框的两个角点<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objCollection(i).GetBoundingBox ptiMin, ptiMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objCollection(j).GetBoundingBox ptjMin, ptjMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将三维点转化为二维点坐标<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve ptiMin(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve ptjMin(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ptiMin(1) - ptjMin(1) &lt; NumError Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set ent = objCollection(i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(i) = objCollection(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(j) = ent<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next j<br/>Next i</p><p>'对y坐标相等的进行x坐标排序<br/>For i = 0 To UBound(objCollection)<br/>&nbsp;&nbsp;&nbsp; For j = 0 To UBound(objCollection)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得每个对象最小包围框的两个角点<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objCollection(i).GetBoundingBox ptiMin, ptiMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objCollection(j).GetBoundingBox ptjMin, ptjMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '将三维点转化为二维点坐标<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve ptiMin(0 To 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim Preserve ptjMin(0 To 1)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ptiMin(1) = ptjMin(1) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ptiMin(0) - ptjMin(0) &lt; NumError Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set ent = objCollection(i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(i) = objCollection(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objCollection(j) = ent<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next j<br/>Next i</p><p>End Function</p>
页: 1 2 3 4 5 [6] 7 8 9 10 11 12 13
查看完整版本: 自己用VBA编的批量打印程序(原创)