巧用宏命令,完美实现一页A4纸打印多张高清照片或幻灯片

合集下载

巧用VBA编程实现EXCEL电子表格的批量自动打印

巧用VBA编程实现EXCEL电子表格的批量自动打印

巧用VBA编程实现EXCEL证件的批量打印夏教荣陈文涛(湖南省邵阳县白仓镇中学421114)摘要介绍了在EXCEL中如何使用VBA,通过实例论述了在EXCEL中可以通过VBA编程实现含有照片的电子证件或表格批量自动打印,提高了EXCEL在实际应用中的工作效率及节省人力资源。

关键词VBA编程自动打印EXCEL一VBA简介1、什么是VBA?VBA是Visual Basic For Application的缩写,它是以Visual Basic为发展基础的语言。

在Office软件中,VBA应用程序能够在Word、Access、Excel等之间进行交互式应用,加强了应用程序间的互动。

VBA是VB的应用程序版本,可以理解为“寄生在Office办公软件中的VB”,可以看作是VB语言的一个子集。

VBA使Office形成了独立的编程环境。

2、VBA与Visual Basic的关系1)、VB用于开发Windows应用程序,其代码最终被编译为可执行程序。

而VBA是用于控制已有应用程序的自动化操作,其代码为解释。

2)、VB拥有独立的开发环境,而VBA必须集成在已有的应用程序中(Excel等)。

3)、VB开发出来的应用程序在脱离开发环境后仍能执行,而VBA编写出来的程序必须在访问集成应用程序(Excel等)的基础上进行。

尽管有以上不同,但它们仍然非常相似。

都使用相同的语言结构。

两者的程序的语法及程序流程完全一样。

二、在Excel中使用VBA1、进入VBA的方法下面以Office2010为例说明来进入VBA的方法:功能区中有一个“开发工具”选项卡,在此可以访问 Visual Basic 编辑器和其他开发人员工具。

由于 Office 2010 在默认情况下不显示“开发工具”选项卡,因此必须使用以下过程启用该选项卡:1)、在“文件”选项卡上,选择“选项”打开“Excel 选项”对话框。

2)、单击该对话框左侧的“自定义功能区”。

打印9页PPT于一张A4上

打印9页PPT于一张A4上

---------------------------------------------------------------最新资料推荐------------------------------------------------------打印9页PPT于一张A4上○ 1 PPT 批量修改文字为黑色的宏命令。

把蓝色底的文字 copy 到新建的宏中。

Dim oShape As Shape Dim oSlide As Slide Dim oTxtRange As TextRange On Error Resume Next For Each oSlide In ActivePresentation.Slides For Each oShape In oSlide.Shapes Set oTxtRange = oShape.TextFrame.TextRange If NotIsNull(oTxtRange) Then With oTxtRange.Font .Color.RGB = RGB(Red:=0,Green:=0, Blue:=0) ‘ End With End IfNext Next 分割线○ 2 如何设置 9 页 PPT 于一张 A4 纸上?第一种方法 1. 打开 ppt,将即将打印的部分编辑好,再另存为文件格式请选择 windows 图元文件,保存好即可! 2.打开word,使用 word 的宏,编辑这些图片的宏代码:(1)点击工具宏宏(07word 的在视图宏)(2)起一个自己容易记住的名字,创建一个新宏(3)请把下面灰色底的内容复制到里面,然后保存(可直接点关闭) Sub 新建的宏名字() ‘ ‘ 新建的宏名字宏‘ ‘ Dim i As Integer Fori = 1 To ActiveDocument.InlineShapes.Count With ActiveDocument.InlineShapes(i) .Height = 210 *0.85 .Width = 297 *1 / 60.9 .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle .Borders(wdBorderBottom).LineWidth = wdLineWidth050pt .Borders(wdBorderBottom).Color = wdColorAutomatic .Borders(wdBorderRight).LineStyle = wdLineStyleSingle .Borders(wdBorderRight).LineWidth = wdLineWidth050pt .Borders(wdBorderRight).Color = wdColorAutomatic End With Next i End Sub 弄出来的效果如下图:分割线(用一种宏命令就可以了。

自己用VBA编的批量打印程序(原创)

自己用VBA编的批量打印程序(原创)

自己用VBA编的批量打印程序(原创)Option Explicit'图形集合Private colDwgs As New Collection'文档对象Dim objDoc As AcadDocument'布局对象Dim objLayout As AcadLayout'打印对象Dim objPlot As AcadPlotPrivate Type BrowseInfohOwner As LongpidlRoot As LongpszDisplayName As StringlpszTitle As StringulFlags As Longlpfn As LonglParam As LongiImage As LongEnd TypePrivate Const MAX_PATH = 260'代表ESC键Private Const VK_ESCAPE = &H1B'API函数的声明Private Declare Function SHBrowseForFolder Lib "shell32.dll" _Alias "SHBrowseForFolderA" (lpBrowseInfo As BrowseInfo) As LongPrivate Declare Function FindWindow Lib "user32" Alias"FindWindowA" (ByVal lpClassName As String, _ByVal lpWindowName As String) As LongPrivate Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal _pidl As Long, ByVal pszPath As String) As LongPrivate Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer' 功能:判断用户是否按下某一个键' 输入:代表键的常量(从API Viewer中获得)' 调用:API函数GetAsyncKeyState' 返回:如果用户按下了指定的键,返回True;否则返回False' 示例:' If CheckKey(&H1B) = True Then do sthPrivate Function CheckKey(lngKey As Long) As BooleanIf GetAsyncKeyState(lngKey) ThenCheckKey = TrueElseCheckKey = FalseEnd IfEnd FunctionPrivate Sub cboPaperSize_Change()'若组合框非空If cboPaperSize.Text <> "" Then' 设置图纸尺寸objLayout.CanonicalMediaName = cboPaperSize.Text' 显示图纸尺寸Call SetPlotZoneEnd IfEnd SubPrivate Sub cboPlotScale_Click()If cboPlotScale.Value TheneStandardScale = True '使用标准打印比例ElseeStandardScale = False '使用自定义打印比例End IfSelect Case cboPlotScale.ValueCase 0'txtNumerator = 1'txtDenominator = 1Case 1objLayout.StandardScale = acScaleToFit txtNumerator = 1txtDenominator = ""Case 2objLayout.StandardScale = ac1_1txtNumerator = 1txtDenominator = 1Case 3objLayout.StandardScale = ac1_2txtNumerator = 1txtDenominator = 2Case 4objLayout.StandardScale = ac1_4txtNumerator = 1txtDenominator = 4Case 5objLayout.StandardScale = ac1_8txtNumerator = 1txtDenominator = 8Case 6objLayout.StandardScale = ac1_10 txtNumerator = 1 txtDenominator = 10Case 7objLayout.StandardScale = ac1_16 txtNumerator = 1 txtDenominator = 16Case 8objLayout.StandardScale = ac1_20 txtNumerator = 1 txtDenominator = 20Case 9objLayout.StandardScale = ac1_30 txtNumerator = 1 txtDenominator = 30Case 10objLayout.StandardScale = ac1_40 txtNumerator = 1 txtDenominator = 40Case 11objLayout.StandardScale = ac1_50 txtNumerator = 1 txtDenominator = 50Case 12objLayout.StandardScale = ac1_100 txtNumerator = 1 txtDenominator = 100Case 13objLayout.StandardScale = ac2_1 txtNumerator = 2txtDenominator = 1Case 14objLayout.StandardScale = ac4_1txtNumerator = 4txtDenominator = 1Case 15objLayout.StandardScale = ac8_1txtNumerator = 8txtDenominator = 1Case 16objLayout.StandardScale = ac10_1txtNumerator = 10txtDenominator = 1Case 17objLayout.StandardScale = ac100_1txtNumerator = 100txtDenominator = 1End SelectEnd SubPrivate Sub cboPlotStyleTableNames_Change()' 设置打印样式表objLayout.StyleSheet = cboPlotStyleT ableNames.TextEnd SubPrivate Sub cboPrintersName_Change()On Error Resume Next' 设置打印机配置(对应AutoCAD中:打印>打印设备>打印机配置>"DWF6 ePlot.pc3")objLayout.ConfigName = cboPrintersName.Text' 更新显示AutoCAD中当前可用的所有图纸尺寸Call ListPaperSize' 更新显示AutoCAD中当前可用的所有打印样式表Call ListPlotStyleTableNamesEnd SubPrivate Sub chkCenterPlot_Change()Dim PtOffset(0 To 1) As Double' 设置图纸是否居中打印If chkCenterPlot.Value ThenPtOffset(0) = 0PtOffset(1) = 0ElsePtOffset(0) = -5PtOffset(1) = -5End IftxtOffsetX.Value = PtOffset(0)txtOffsetY.Value = PtOffset(1)End SubPrivate Sub chkPlotHidden_Change()'设置是否隐藏图纸空间对象If chkPlotHidden.Value Then'打印时隐藏图纸空间对象objLayout.PlotHidden = TrueElse'打印时不隐藏图纸空间对象objLayout.PlotHidden = FalseEnd IfEnd SubPrivate Sub chkPlotToFile_Change()'设置“打印到文件”组各控件激活状态If chkPlotT oFile.Value ThenlbPlotPath.Enabled = TruecboPlotPath.Enabled = TruecmdBrowse2.Enabled = TrueElselbPlotPath.Enabled = FalsecboPlotPath.Enabled = FalsecmdBrowse2.Enabled = FalseEnd IfEnd SubPrivate Sub chkPlotWithLineweights_Change() '设置是否打印对象线宽If chkPlotWithLineweights.Value Then'打印时使用图形文件中的线宽objLayout.PlotWithLineweights = TrueElse'打印时使用打印样式中的线宽objLayout.PlotWithLineweights = FalseEnd IfEnd SubPrivate Sub chkPlotWithPlotStyles_Change() '设置是否应用打印样式If chkPlotWithPlotStyles.Value Then'打印时在对象中使用打印样式objLayout.PlotWithPlotStyles = True chkPlotWithLineweights.Enabled = False Else'打印时在对象中不使用打印样式objLayout.PlotWithPlotStyles = False chkPlotWithLineweights.Enabled = TrueEnd IfEnd Sub' 设置图纸打印方向Call PaperRotationChangeEnd SubPrivate Sub cmdAdd_Click()'如果列表框中未存在任何元素If lstCurFiles.ListCount = 0 ThenMsgBox "请先向列表框中添加文件!", vbCritical Exit SubEnd IfDim strFlies As StringDim i As IntegerDim n As Integern = 0'将上面列表框中选中的对象添加到下面的列表框中For i = 0 To lstCurFiles.ListCount - 1If lstCurFiles.Selected(i) ThenstrFlies = lstCurFiles.List(i)n = n + 1If Not HasItem(lstPlotFiles, strFlies) Then lstPlotFiles.AddItem lstCurFiles.List(i) 'End IfEnd IfNext i'如果列表框中未存在被选择的元素If n = 0 ThenMsgBox "请选择要从列表中添加的元素!", vbCritical Exit SubEnd IfEnd Sub'如果列表框中未存在任何元素If lstCurFiles.ListCount = 0 ThenMsgBox "请先向列表框中添加文件!", vbCriticalExit SubEnd IfDim strFlies As StringDim i As Integer'将上面列表框中选中的对象添加到下面的列表框中For i = 0 To lstCurFiles.ListCount - 1strFlies = lstCurFiles.List(i)If Not HasItem(lstPlotFiles, strFlies) Then lstPlotFiles.AddItem lstCurFiles.List(i)End IfNext iEnd SubPrivate Sub cmdBrowse_Click()'在文本框中显示获得的路径txtCurPath.Text = ReturnFolder(0)End SubPrivate Sub cmdBrowse2_Click()Dim strPath As StringstrPath = ReturnFolder(0)'若返回文件夹路径非空If strPath <> "" Then'若组合框中未存在返回文件夹路径,则将其添加到组合框中If HasItem2(strPath) < 0 Then'在组合框中显示获得的路径With cboPlotPath.AddItem strPath, 0'使用下拉列表的形式.Style = fmStyleDropDownList'设置下拉列表的下标下限.BoundColumn = 0'设置默认的显示项目.ListIndex = 0End With'若组合框中已存在返回文件夹路径,则将返回文件夹路径置为选中ElseWith cboPlotPath'设置默认的显示项目.ListIndex = HasItem2(strPath)End WithEnd IfEnd IfEnd SubPrivate Sub cmdClear_Click()'如果列表框中未存在任何元素If lstPlotFiles.ListCount = 0 ThenMsgBox "请先向列表框中添加文件!", vbCriticalExit SubEnd IfDim i As Integer, n As Integer, count As Integer'列表框中元素的数量count = lstPlotFiles.ListCountn = 0'将列表框中选中的对象删除For i = 0 To count - 1If lstPlotFiles.Selected(i) Thenn = n + 1Else'移动列表框中的元素lstPlotFiles.List(i - n) = lstPlotFiles.List(i)End IfNext i'如果列表框中未存在被选择的元素If n = 0 ThenMsgBox "请选择要从列表中清除的元素!", vbCritical Exit SubEnd If'删除最后n行的元素For i = 1 To nlstPlotFiles.RemoveItem (count - i)Next iEnd SubPrivate Sub cmdClearAll_Click()'如果列表框中未存在任何元素If lstPlotFiles.ListCount = 0 ThenMsgBox "请先向列表框中添加文件!", vbCriticalExit SubEnd IfDim Msg, Style, Title, Help, Ctxt, Response, MyStringMsg = "清除整个图形列表?"Style = vbOKCancel + vbQuestion + vbDefaultButton2 Title = "Clear Files"Response = MsgBox(Msg, Style, Title)If Response = vbOK ThentxtCurPath.Text = ""'清除列表框中所有元素lstPlotFiles.ClearEnd IfEnd SubPrivate Sub cmdExit_Click()'退出EndEnd SubPrivate Sub cmdInput_Click()'导入打印设置'设置标准对话框With comDlg'设置标准对话框标题.DialogTitle = "导入打印设置"'设置标准对话框类型列表中所显示的过滤器.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"'设置标准对话框的起始目录'.InDir = "C:\"'显示[打开]对话框.ShowOpenEnd WithDim strFileName As StringstrFileName = comDlg.fileName'strFileName = "F:\AutoCAD\丹通施工图\打印设置.txt" '若返回文件名为空,不进行操作If strFileName = "" ThenMsgBox "请重新选择文件位置!"Exit SubEnd If'读入文件的操作Dim i As Integer, nFile As IntegerDim x As Double, y As DoubleDim count As Integer, index As IntegerDim strTemp As String'获得下一个可供Open语句使用的文件号nFile = FreeFile'打开文件Open strFileName For Input As #nFile'读入当前路径'读入一行文本并存储在变量中Line Input #nFile, strTemp'读入当前路径并设置文本框文字Input #nFile, strTemptxtCurPath.Text = strTemp'读入打印文件列表并添加到列表框中Call InputData3(lstPlotFiles, nFile)'读入打印机配置列表并添加到组合框中Call InputData(cboPrintersName, nFile)'读入打印样式表并添加到组合框中Call InputData(cboPlotStyleTableNames, nFile)'读入图纸尺寸列表并添加到组合框中Call InputData(cboPaperSize, nFile)'读入图纸单位并设置单选按钮选择状态'读入一行文本并存储在变量中Line Input #nFile, strTemp'读入图纸单位Input #nFile, strTemp'设置单选按钮选择状态If strTemp = "毫米" Then optMillimeters.Value = TrueElseoptInches.Value = TrueEnd If'读入图纸方向并设置单选按钮选择状态'读入一行文本并存储在变量中Line Input #nFile, strTemp'读入图纸方向Input #nFile, strTemp'设置单选按钮选择状态If strTemp = "纵向" ThenoptVertical.Value = TrueElseoptHorizontal.Value = TrueEnd If'读入是否反向打印并设置复选按钮选择状态Call InputData2(chkReverse, nFile)'读入打印份数'读入一行文本并存储在变量中Line Input #nFile, strTemp'读入打印份数Input #nFile, count'设置文本框文字txtNumber.Text = count'读入是否打印到文件并设置复选按钮选择状态Call InputData2(chkPlotToFile, nFile)'读入打印路径列表并添加到组合框中Call InputData(cboPlotPath, nFile)'读入打印比例列表并添加到组合框中Call InputData(cboPlotScale, nFile)'读入一行文本并存储在变量中Line Input #nFile, strTemp'读入当前打印比例并设置文本框文字Input #nFile, xInput #nFile, ytxtNumerator.Text = xtxtDenominator.Text = y'读入是否居中打印并设置复选按钮选择状态Call InputData2(chkCenterPlot, nFile)'读入打印偏移'读入一行文本并存储在变量中Line Input #nFile, strTemp'读入打印偏移并设置文本框文字Input #nFile, xInput #nFile, ytxtOffsetX.Text = xtxtOffsetY.Text = y'读入是否打印对象线宽并设置复选按钮选择状态Call InputData2(chkPlotWithLineweights, nFile) '读入是否采用打印样式并设置复选按钮选择状态Call InputData2(chkPlotWithPlotStyles, nFile)'读入是否隐藏图纸空间对象并设置复选按钮选择状态Call InputData2(chkPlotHidden, nFile)'读入图框形式并设置单选按钮选择状态'读入一行文本并存储在变量中Line Input #nFile, strTemp'读入图框形式Input #nFile, strTemp'设置单选按钮选择状态If strTemp = "图块" ThenoptBlock.Value = TrueElseoptLayer.Value = TrueEnd If'读入图块名列表并添加到组合框中Call InputData(cboBlockName, nFile)'读入图层名列表并添加到组合框中Call InputData(cboLayerName, nFile)'关闭文件Close #nFileEnd SubPrivate Sub cmdListPrints_Click()' 显示AutoCAD中当前可用的打印机列表Call ListPrintersEnd SubPrivate Sub cmdOutput_Click()'导出打印设置'设置标准对话框With comDlg'设置标准对话框标题.DialogTitle = "导出打印设置"'设置标准对话框类型列表中所显示的过滤器.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*" '设置标准对话框的起始目录'.InDir = "C:\"'设置[另存为]对话框的缺省扩展名.DefaultExt = "txt"'显示[另存为]对话框.ShowSaveEnd WithDim strFileName As String, strTemp As String strFileName = comDlg.fileName'strFileName = "F:\AutoCAD\丹通施工图\打印设置.txt" '若返回文件名为空,不进行操作If strFileName = "" ThenMsgBox "请重新选择保存位置!"Exit SubEnd If'保存文件的操作Dim i As Integer'打开文件Open strFileName For Output As #1'输出当前路径Print #1, "当前路径:"Print #1, txtCurPath.Text'输出打印文件列表Print #1, "打印文件列表:"'输出打印机配置列表的信息Call OutputData3(lstPlotFiles, 1)'输出打印机配置Print #1, "打印机配置:"'输出打印机配置列表的信息Call OutputData(cboPrintersName, 1)Print #1, "打印样式表:"'输出打印样式表的信息Call OutputData(cboPlotStyleTableNames, 1)'输出图纸尺寸列表Print #1, "图纸尺寸列表:"'输出图纸尺寸列表的信息Call OutputData(cboPaperSize, 1)'输出图纸单位Print #1, "图纸单位:"'输出图纸单位信息If optMillimeters.Value = True Then strTemp = "毫米"ElsestrTemp = "英寸"End IfPrint #1, strTemp'输出图纸方向Print #1, "图纸方向:"'输出图纸方向信息If optVertical.Value = True ThenstrTemp = "纵向"ElsestrTemp = "横向"End IfPrint #1, strTempPrint #1, "是否反向打印:"Call OutputData2(chkReverse, 1)'输出打印份数Print #1, "打印份数:"Print #1, txtNumber.Text'输出是否打印到文件Print #1, "是否打印到文件:"Call OutputData2(chkPlotToFile, 1)'输出打印路径Print #1, "打印路径:"'输出打印路径列表的信息Call OutputData(cboPlotPath, 1)'输出打印比例Print #1, "打印比例:"'输出打印比例列表的信息Call OutputData(cboPlotScale, 1)'输出当前打印比例Print #1, "当前打印比例:"Print #1, txtNumerator.TextPrint #1, txtDenominator.Text'输出是否居中打印Print #1, "是否居中打印:"Call OutputData2(chkCenterPlot, 1)'输出打印偏移Print #1, "打印偏移:"Print #1, txtOffsetX.TextPrint #1, txtOffsetY.Text'输出是否打印对象线宽Print #1, "是否打印对象线宽:"Call OutputData2(chkPlotWithLineweights, 1) '输出是否采用打印样式Print #1, "是否采用打印样式:"Call OutputData2(chkPlotWithPlotStyles, 1) '输出是否隐藏图纸空间对象Print #1, "是否隐藏图纸空间对象:"Call OutputData2(chkPlotHidden, 1)'输出图框形式Print #1, "图框形式:"'输出图框形式信息If optBlock.Value = True ThenstrTemp = "图块"ElsestrTemp = "图层"End IfPrint #1, strTemp'输出图块名列表Print #1, "图块名列表:"'输出图块名列表的信息Call OutputData(cboBlockName, 1)'输出图层名列表Print #1, "图块名列表:"'输出图层名列表的信息Call OutputData(cboLayerName, 1)'关闭文件Close 1End SubPrivate Sub cmdPick_Click()On Error Resume NextDim objSelect As AcadEntityDim ptPick As VariantDim strTemp As StringSet objDoc = ThisDrawing.Application.ActiveDocument'将控制权交给AutoCADfrmBatchPlot.Hide'在AutoCAD中选择实体并判断类型Retry:objDoc.Utility.GetEntity objSelect, ptPick, vbCrLf & "请选择实体:"' 处理按下Esc键的错误If objSelect Is Nothing ThenIf CheckKey(VK_ESCAPE) = True Then'显示对话框frmBatchPlot.ShowExit SubElseGoTo RetryEnd IfEnd If' 处理未选择到实体的错误If Err <> 0 ThenErr.ClearGoTo RetryEnd If'若为指定图块If optBlock.Value = True Then'判断实体是否块参照If TypeOf objSelect Is AcadBlockReference Then'判断实体是否模型空间、图纸空间和匿名块If StrComp(Left(, 1), "*") <> 0 Then'获得块参照名strTemp = ElseMsgBox "您选择的是匿名块,请重新选择块参照!", vbCritical '显示对话框frmBatchPlot.ShowExit SubEnd IfElseMsgBox "您选择的不是块参照,请重新选择块参照!", vbCritical'显示对话框frmBatchPlot.ShowExit SubEnd If'刷新块参照列表Call ListBlock'将所选块参照在组合框中置为当前Call SetSelected(cboBlockName, strTemp)Else'判断实体是否多段线If TypeOf objSelect Is AcadLWPolyline Then'获得多段线所在图层名strTemp = yerElseMsgBox "您选择的不是轻量多段线,请重新选择轻量多段线!", vbCritical'显示对话框frmBatchPlot.ShowExit SubEnd If' 刷新图层列表Call ListLayer'将所选实体所在图层在组合框中置为当前Call SetSelected(cboLayerName, strTemp)End If'显示对话框frmBatchPlot.ShowEnd SubPrivate Sub SetSelected(ListObject As Object, SItem As String) '将该元素在组合框中置为当前Dim i As Long'通过比较确定该元素的位置For i = 0 To (ListObject.ListCount - 1)If StrComp(ListObject.List(i), SItem, vbTextCompare) = 0 ThenListObject.ListIndex = iExit SubEnd IfNextEnd SubPrivate Sub cmdPreview_Click()'若按图块进行批量打印If optBlock.Value = True ThenIf cboBlockName.ListCount = 0 Or cboBlockName.Text = "" ThenMsgBox "请先选择块参照!", vbCriticalExit SubEnd IfCall PreviewByBlock(cboBlockName.T ext)'若按图层进行批量打印ElseIf cboLayerName.ListCount = 0 Or cboLayerName.Text = "" ThenMsgBox "请先选择块参照!", vbCriticalExit SubEnd IfCall PreviewByLayer(cboLayerName.T ext)End IfEnd SubPrivate Sub cmdRefresh_Click()'刷新块参照列表Call ListBlock' 刷新图层列表Call ListLayerEnd SubPrivate Sub cmdPlot_Click()'若按图块进行批量打印If optBlock.Value = True ThenIf cboBlockName.ListCount = 0 Or cboBlockName.Text = "" ThenMsgBox "请先选择块参照!", vbCriticalExit SubEnd IfCall BatchPlotByBlock(cboBlockName.Text)'若按图层进行批量打印ElseIf cboLayerName.ListCount = 0 Or cboLayerName.Text = "" ThenMsgBox "请先选择块参照!", vbCriticalExit SubEnd IfCall BatchPlotByLayer(cboLayerName.Text)End IfEnd SubPrivate Sub cmdAbout_Click()'显示关于对话框frmAbout.ShowEnd SubPrivate Sub optBlock_Change()'设置“图块与图层”组各控件激活状态If optBlock.Value = True ThenlbBlockName.Enabled = TruecboBlockName.Enabled = TruelbLayerName.Enabled = False cboLayerName.Enabled = False ElselbBlockName.Enabled = False cboBlockName.Enabled = False lbLayerName.Enabled = True cboLayerName.Enabled = TrueEnd IfEnd SubPrivate Sub optLayer_Change()'设置“图块与图层”组各控件激活状态If optBlock.Value = True Then lbBlockName.Enabled = True cboBlockName.Enabled = True lbLayerName.Enabled = False cboLayerName.Enabled = False ElselbBlockName.Enabled = False cboBlockName.Enabled = False lbLayerName.Enabled = True cboLayerName.Enabled = TrueEnd IfEnd SubPrivate Sub optMillimeters_Change() ' 设置图纸单位If optMillimeters.Value = True Then objLayout.PaperUnits = acMillimeters lbUnit.Caption = "毫米=" lbUnitX.Caption = "毫米" lbUnitY.Caption = "毫米"lbPaperUnit.Caption = "毫米"ElseobjLayout.PaperUnits = acInches lbUnit.Caption = "英寸="lbUnitX.Caption = "英寸"lbUnitY.Caption = "英寸" lbPaperUnit.Caption = "英寸"End If' 显示图纸尺寸Call SetPlotZoneEnd SubPrivate Sub OptVertical_Change()' 设置图纸打印方向Call PaperRotationChangeEnd SubPrivate Sub spnAngle_SpinDown()If CInt(txtNumber.T ext) > 1 Then txtNumber.Text = CInt(txtNumber.Text) - 1 End IfEnd SubPrivate Sub spnAngle_SpinUp() txtNumber.Text = CInt(txtNumber.Text) + 1 End SubPrivate Sub txtCurPath_Change()'查找文件,向列表框中添加If Len(Dir(txtCurPath.Text)) > 0 Then FindFile colDwgs, txtCurPath.Text, "dwg" If AddToList(lstCurFiles, colDwgs) Then End IfEnd IfEnd SubPrivate Sub txtDenominator_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)' 设置自定义图纸尺寸If IsNumeric(txtDenominator) Then'设置组合框显示项目为“自定义”cboPlotScale.ListIndex = 0ElseMsgBox "请输入数字!", vbCriticalEnd IfEnd SubPrivate Sub txtNumber_Change()' 设置图纸打印份数'objPlot.NumberOfCopies = CDbl(txtNumber.Text)'objPlot.NumberOfCopies = CInt(txtNumber.Text)objPlot.NumberOfCopies = txtNumber.ValueEnd SubPrivate Sub txtNumerator_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)' 设置自定义图纸尺寸If IsNumeric(txtNumerator) Then'设置组合框显示项目为“自定义”cboPlotScale.ListIndex = 0ElseMsgBox "请输入数字!", vbCriticalEnd IfEnd SubPrivate Sub txtOffsetX_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)' 设置自定义图纸尺寸If (KeyAscii >= Asc("0") And KeyAscii <= Asc("9")) Or KeyAscii = Asc(".") Or KeyAscii = Asc("-") Then'取消“居中打印”复选框chkCenterPlot.Value = FalseElseMsgBox "请输入数字!", vbCriticalEnd IfEnd SubPrivate Sub txtOffsetY_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)' 设置自定义图纸尺寸If (KeyAscii >= Asc("0") And KeyAscii <= Asc("9")) Or KeyAscii = Asc(".") Or KeyAscii = Asc("-") Then'取消“居中打印”复选框chkCenterPlot.Value = FalseElseMsgBox "请输入数字!", vbCriticalEnd IfEnd SubPrivate Sub UserForm_Initialize()Set objDoc = ThisDrawing.Application.ActiveDocumentSet objLayout = ThisDrawing.ActiveLayoutSet objPlot = ThisDrawing.Plot'禁用“当前路径”文本框txtCurPath.Enabled = False'列出当前所有打印机Call ListPrinters' 显示AutoCAD中当前可用的打印比例列表Call ListPlotScale'设置“打印到文件”是否选中chkPlotToFile.Value = False'禁用“打印到文件”组各控件lbPlotPath.Enabled = FalsecboPlotPath.Enabled = FalsecmdBrowse2.Enabled = False' 显示AutoCAD中当前可用的图块Call ListBlock' 显示AutoCAD中当前可用的图层Call ListLayerEnd SubPublic Function ReturnFolder(lngHwnd As Long) As String Dim Browser As BrowseInfoDim lngFolder As LongDim strPath As StringDim strTemp As StringWith Browser.hOwner = lngHwnd.lpszTitle = "选择工作路径".pszDisplayName = String(MAX_PATH, 0)End With'用空格填充字符串strPath = String(MAX_PATH, 0)'调用API函数显示文件夹列表lngFolder = SHBrowseForFolder(Browser)'使用API函数获取返回的路径If lngFolder ThenSHGetPathFromIDList lngFolder, strPathstrTemp = Left(strPath, InStr(strPath, vbNullChar) - 1)If (Right(strTemp, 1) <> "\") ThenstrTemp = strTemp & "\"End IfReturnFolder = strTempEnd IfEnd FunctionPublic Sub FindFile(ByRef files As Collection, strDir, strExt) '删除集合中所有的对象Dim i As IntegerFor i = 1 To files.countfiles.Remove 1Next i'查找dwg文件,并将其添加到集合中Dim strFileName As StringIf (Right(strDir, 1) <> "\") ThenstrDir = strDir & "\"End IfstrFileName = Dir(strDir & "*.*", vbDirectory)Do While (strFileName <> "")If (UCase(Right(strFileName, 3)) = UCase(strExt)) Thenfiles.Add strDir & strFileNameEnd IfstrFileName = Dir '返回下一个符合条件的文件LoopEnd SubPublic Function AddToList(objBox As ListBox, Names As Collection) As BooleanDim i As IntegerOn Error GoTo Error_ControlobjBox.Clear'将集合中的对象添加到列表框中For i = 1 To Names.countobjBox.AddItem Names(i)Next iExit_Here:AddToList = TrueExit FunctionError_Control:MsgBox "发生下面的错误:" & Err.NumberAddToList = FalseEnd FunctionPrivate Function HasItem(objBox As ListBox, strFlies As String) As Boolean'检查路径是否已经存在HasItem = FalseDim i As IntegerIf objBox.ListCount > 0 ThenFor i = 0 To objBox.ListCount - 1If StrComp(objBox.List(i), strFlies, vbT extCompare) = 0 Then HasItem = TrueExit FunctionEnd IfNext iEnd IfEnd FunctionPrivate Function HasItem2(ByVal strPath As String) As Integer'检查路径是否已经存在HasItem2 = -1Dim i As IntegerIf cboPlotPath.ListCount > 0 ThenFor i = 0 To cboPlotPath.ListCount - 1If StrComp(cboPlotPath.List(i), strPath, vbTextCompare) = 0 ThenHasItem2 = iExit FunctionEnd IfNext iEnd IfEnd Function'打开或激活文件Private Sub OpenFile(fileName As String)Dim dwgFile As AcadDocumentDim strFile As StringFor Each dwgFile In ThisDrawing.Application.Documents strFile = dwgFile.Path & "\" & '若第i个图形文件已经被打开,则将其激活If strFile = fileName Then'若dwgFile尚未激活,则将其激活If dwgFile.Active = False ThenThisDrawing.Application.ActiveDocument = dwgFile End IfExit SubEnd IfNext'若第i个图形文件尚未被打开,则将其打开ThisDrawing.Application.Documents.Open fileNameEnd Sub' 显示AutoCAD中当前可用的打印机列表Public Sub ListPrinters()objLayout.RefreshPlotDeviceInfo' 获得所有的可用打印机Dim plotDevices As VariantplotDevices = objLayout.GetPlotDeviceNames' 删除以前的打印机列表cboPrintersName.Clear' 显示打印机列表Dim i As IntegerFor i = 0 To UBound(plotDevices) cboPrintersName.AddItem (plotDevices(i))Next i' 设置组合框初始选项With cboPrintersName'使用下拉列表的形式.Style = fmStyleDropDownList'设置下拉列表的下标下限.BoundColumn = 0'设置默认的显示项目.ListIndex = 1End WithEnd Sub' 显示AutoCAD中当前可用的打印样式Public Sub ListPlotStyleTableNames()Set objLayout = ThisDrawing.ActiveLayout objLayout.RefreshPlotDeviceInfo' 获得所有的可用打印样式Dim plotStyleTables As VariantplotStyleTables = objLayout.GetPlotStyleTableNames' 删除以前的打印样式列表cboPlotStyleTableNames.Clear' 显打印样式列表Dim i As IntegerFor i = 0 To UBound(plotStyleTables) cboPlotStyleTableNames.AddItem (plotStyleTables(i)) Next i' 设置组合框初始选项With cboPlotStyleT ableNames'使用下拉列表的形式.Style = fmStyleDropDownList'设置下拉列表的下标下限.BoundColumn = 0'设置默认的显示项目.ListIndex = 0End WithEnd Sub' 显示AutoCAD中当前可用的图纸尺寸Public Sub ListPaperSize()objLayout.RefreshPlotDeviceInfo' 获得所有当前可用可用图纸尺寸列表Dim paperSizes As VariantpaperSizes = objLayout.GetCanonicalMediaNames' 删除以前的图纸尺寸列表cboPaperSize.Clear' 显示图纸尺寸列表Dim i As IntegerFor i = 0 To UBound(paperSizes) cboPaperSize.AddItem (paperSizes(i))Next i' 设置组合框初始选项With cboPaperSize'使用下拉列表的形式.Style = fmStyleDropDownList'设置下拉列表的下标下限.BoundColumn = 0'设置默认的显示项目.ListIndex = 0End WithEnd Sub' 显示AutoCAD中可以使用的打印比例Public Sub ListPlotScale()' 显打印比例列表With cboPlotScale.AddItem ("自定义"), 0.AddItem ("按图纸空间缩放"), 1.AddItem ("1:1"), 2.AddItem ("1:2"), 3.AddItem ("1:4"), 4.AddItem ("1:8"), 5.AddItem ("1:10"), 6.AddItem ("1:16"), 7.AddItem ("1:20"), 8.AddItem ("1:30"), 9.AddItem ("1:40"), 10.AddItem ("1:50"), 11.AddItem ("1:100"), 12.AddItem ("2:1"), 13.AddItem ("4:1"), 14.AddItem ("8:1"), 15.AddItem ("10:1"), 16.AddItem ("100:1"), 17'使用下拉列表的形式.Style = fmStyleDropDownList'设置下拉列表的下标下限.BoundColumn = 0'设置默认的显示项目.ListIndex = 2End WithtxtNumerator = 1txtDenominator = 1End Sub' 显示AutoCAD中当前可用的图层Public Sub ListLayer()Dim LayerList As Collection'获得图形中存在的图层列表Set LayerList = GetLayerList()'刷新图层列表Call RefreshList(cboLayerName, LayerList)'选择图层列表中的第一个实体If cboLayerName.ListIndex = -1 Then cboLayerName.ListIndex = 0End IfEnd Sub'获得图形中存在的图层列表Private Function GetLayerList() As Collection Dim objLayer As AcadLayerDim LayerList As New CollectionSet objDoc = ThisDrawing.Application.ActiveDocument '获得可用的图层For Each objLayer In yersLayerList.Add , Next'返回图形中块参照的列表Set GetLayerList = LayerListEnd Function' 显示AutoCAD中当前可用的图块Public Sub ListBlock()Dim BlockReferenceList As Collection'获得图形中存在的块参照列表Set BlockReferenceList = GetBlockReferences()'判断是否存在块参照If BlockReferenceList Is Nothing ThenMsgBox "当前图形中不存在任何的块!", vbExclamation Exit SubEnd If'刷新块参照列表Call RefreshList(cboBlockName, BlockReferenceList)'选择块参照列表中的第一个实体If cboBlockName.ListIndex = -1 Then cboBlockName.ListIndex = 0End If。

CADVBA批量打印

CADVBA批量打印

打印图纸,不折不扣的体力活。

最多一次打了600多图,打印机都因"体力不支"中途休息了几次,如果不是用程序批打,估计我也得累个半死。

下面贴出打印过程的代码,加个for循环就可以批打了。

简单说明一下打印函数PrinterName - 打印机名称Styles - 样式表名称MediaName - 纸大小Copies - 打印份数AutoMedia - 自动纸开关AutoRotate - 自动旋转,纵向/横向AutoClose - 打印完毕关闭文档AutoFrame - 自动判断图框,主要针对图框为块的情形打印过程并没有提供全部的AUTO CAD打印选项,因为我一般用不到,比如"打印偏移"、"打印到文件"我从来不用的,如果需要可以添加进去。

程序会根据指定块名查找图框,也可以根据块的纵横比例自动判断是否为图框,然后按块打印,一图纸中允许有多个图框;对于编组(Group)形式的图框,指定编组名即可如果没有找到任何图框块或编组时,按图纸围打印另外,打印时会先预览,然后由用户选择是否打印,避免打错。

[代码如下] - By:忽又一天hi.baidu./suddenday/Sub QuickPlot()Call PlotFunction("SHARP AR-M256", "", "A3", 1, True, True, False, True)End SubSub Plot2PDF()Call PlotFunction("pdfFactory Pro", "acad.ctb", "", 1, True, True, False, True)End SubSub PlotA4()Call PlotFunction("SHARP AR-M256", "acad.ctb", "A4", 1, False, True, False, True)End Sub'快速打印/批量打印Public Sub PlotFunction(PrinterName As String, Styles As String, MediaName As String, Copies As Integer, _AutoMedia As Boolean, AutoRotate As Boolean, AutoClose As Boolean, AutoFrame As Boolean)On Error Resume NextDim ptMin As Variant, ptMax As VariantDim Ent As AcadEntityDim PlotCount As IntegerSet objDoc = ThisDrawing.Application.ActiveDocument Set objLayout = youts.Item("Model")Set objPlot = objDoc.PlotThisDrawing.Application.ZoomExtents' 设置打印机If Not Trim(PrinterName) = ""ThenobjLayout.ConfigName = PrinterNameElseExit SubEnd If' 设置打印样式表If Not Trim(Styles) = ""ThenobjLayout.StyleSheet = StylesElseobjLayout.StyleSheet = "acad.ctb"End If' 设置图纸尺寸If AutoMedia ThenobjLayout.CanonicalMediaName = "A3"ElseIf Not Trim(MediaName) = ""ThenobjLayout.CanonicalMediaName = MediaNameElseobjLayout.CanonicalMediaName = "A3"End IfEnd If' 设置图纸单位objLayout.PaperUnits = acMillimeters'objLayout.PaperUnits = acInches' 设置默认图纸打印方向'objLayout.PlotRotation = ac0degrees'纵向'objLayout.PlotRotation = ac180degreesobjLayout.PlotRotation = ac90degrees'横向'objLayout.PlotRotation = ac270degrees' 设置图纸打印比例objLayout.StandardScale = acScaleToFiteStandardScale = True'使用标准打印比例'eStandardScale = False '使用自定义打印比例' 设置自定义打印比例'objLayout.SetCustomScale txtNumerator.Value, txtDenominator.Value' 设置图纸是否居中打印objLayout.CenterPlot = True' 打印时使用图形文件中的线宽objLayout.PlotWithLineweights = True' 设置是否应用打印样式objLayout.PlotWithPlotStyles = True' 打印时隐藏图纸空间对象objLayout.PlotHidden = False' 设置图纸打印份数If Copies >= 1 ThenobjPlot.NumberOfCopies = CInt(Copies)ElseobjPlot.NumberOfCopies = 1End If' 将打印错误报告切换为静默错误模式,以便不间断地执行打印任务objPlot.QuietErrorMode = True' 重新生成当前图形objDoc.Regen acAllViewports' 设置前台打印,使打印任务按打印顺序依次发送到打印机objDoc.SetVariable "BACKGROUNDPLOT", 0PlotCount = 0'打印计数For Each Ent In objDoc.ModelSpaceIf TypeOf Ent Is AcadBlockReference ThenIf IsFrame(Ent, AutoFrame) = True And objDoc.Blocks().count > 0 Then Ent.GetBoundingBox ptMin, ptMaxDebug.Print & "--" & objDoc.Blocks().count' 将三维点转化为二维点坐标ReDim Preserve ptMin(0 To 1)ReDim Preserve ptMax(0 To 1)' 设置打印窗口ThisDrawing.ActiveLayout.SetWindowToPlot ptMin, ptMaxobjLayout.PlotType = acWindowIf Abs(ptMax(0) - ptMin(0)) < Abs(ptMax(1) - ptMin(1)) ThenIf AutoMedia Then objLayout.CanonicalMediaName = "A4"If AutoRotate Then objLayout.PlotRotation = ac0degreesEnd If' 完全预览并提示打印objPlot.DisplayPlotPreview acFullPreviewUserSel = MsgBox("是否打印预览?" & Chr(13) & Chr(13) & "打印到:" & objLayout.ConfigName & _"大小:" & objLayout.CanonicalMediaName & "方式:acWindow(" & objLayout.PlotType & ") " & _Chr(13) & Chr(13) & "选择[取消]退出程序!", vbYesNoCancel, "打印选项") If UserSel = vbYes ThenobjPlot.PlotToDevice objLayout.ConfigNamePlotCount = PlotCount + 1ElseIf UserSel = vbCancel ThenExit ForEnd IfEnd IfEnd IfNext Ent' 图框为编组(Group)对象时Dim FrmGrp As AcadGroupDim TptMin, TptMax As Variant' 按编组名称查找图框编组对象For Each FrmGrp In ThisDrawing.GroupsIf IsFrame(FrmGrp, False) And FrmGrp.count > 0 ThenDebug.Print & "[Items]:" & FrmGrp.count & "----group"' 得到图框边界点坐标FrmGrp.Item(0).GetBoundingBox ptMin, ptMaxFor i = 1 To FrmGrp.count - 1FrmGrp.Item(i).GetBoundingBox TptMin, TptMaxReDim Preserve TptMin(0 To 1)ReDim Preserve TptMax(0 To 1)For j = 0 To 1If TptMin(j) < ptMin(j) ThenptMin(j) = TptMin(j)If TptMax(j) > ptMax(j) ThenptMax(j) = TptMax(j)End IfNext ji = i + 1Next' 将三维点转化为二维点坐标ReDim Preserve ptMin(0 To 1)ReDim Preserve ptMax(0 To 1)' 设置打印窗口ThisDrawing.ActiveLayout.SetWindowToPlot ptMin, ptMaxobjLayout.PlotType = acWindowIf Abs(ptMax(0) - ptMin(0)) < Abs(ptMax(1) - ptMin(1)) ThenIf AutoMedia Then objLayout.CanonicalMediaName = "A4"If AutoRotate Then objLayout.PlotRotation = ac0degreesEnd If' 完全预览并提示打印objPlot.DisplayPlotPreview acFullPreviewUserSel = MsgBox("是否打印预览?" & Chr(13) & Chr(13) & "打印到:" & objLayout.ConfigName & _"大小:" & objLayout.CanonicalMediaName & "方式:acWindow(" & objLayout.PlotType & ") " & _Chr(13) & Chr(13) & "选择[取消]退出程序!", vbYesNoCancel, "打印选项")If UserSel = vbYes ThenPlotCount = PlotCount + 1objPlot.PlotToDevice objLayout.ConfigNameElseIf UserSel = vbCancel ThenExit ForEnd IfEnd IfNext FrmGrp' 没有找到图框时按围打印If PlotCount = 0 And objDoc.ModelSpace.count > 0 ThenptMax = ThisDrawing.GetVariable("EXTMAX")ptMin = ThisDrawing.GetVariable("EXTMIN")' 图形围无实体则退出If ptMax(0) = ptMin(0) Or ptMax(1) = ptMin(1) ThenExit Sub' 设置围打印objLayout.PlotType = acExtents' 对纵向的图纸设置If Abs(ptMax(0) - ptMin(0)) < Abs(ptMax(1) - ptMin(1)) ThenIf AutoMedia Then objLayout.CanonicalMediaName = "A4"If AutoRotate Then objLayout.PlotRotation = ac0degreesEnd If' 完全预览并提示打印objPlot.DisplayPlotPreview acFullPreviewUserSel = MsgBox("是否打印预览?" & Chr(13) & Chr(13) & "打印到:" & objLayout.ConfigName & _"大小:" & objLayout.CanonicalMediaName & "方式:acExtents(" & objLayout.PlotType & ") " & _Chr(13) & Chr(13) & "选择[取消]退出程序!", vbYesNoCancel, "打印选项")If UserSel = vbYes ThenobjPlot.PlotToDevice objLayout.ConfigNameElseIf UserSel = vbCancel ThenExit SubEnd IfEnd If' 关闭文档False 为不保存修改If AutoClose Then objDoc.Close False, End SubPublic Function IsFrame(entobj As Object, AutoMode As Boolean) As Boolean'判断是否为图框On Error Resume NextIsFrame = FalseDim i As IntegerDim FrmNameList As VariantFrmNameList = "blkFrame,A1,A2,A3,A4,PC_PAPER_DIC"'图框块、编组名列表FrmNameList = Split(FrmNameList, ",")For i = 0 To UBound(FrmNameList)If = FrmNameList(i) ThenIsFrame = TrueExit ForEnd IfNext'块名不符时由大小比例判断是否为图框(可能会误判,不过几率不高)If IsFrame = False And AutoMode And entobj.ObjectName = "AcDbBlockReference"Then entobj.GetBoundingBox ptMin, ptMaxDebug.Print ptMin(0) & "--" & ptMax(0)If Abs((ptMax(1) - ptMin(1)) / (ptMax(0) - ptMin(0)) - 1.414) < 0.01 Or Abs((ptMax(1) - ptMin(1)) / (ptMax(0) - ptMin(0)) - 0.707) < 0.01 ThenIsFrame = TrueEnd IfEnd IfEnd Function。

利用Excel的宏批量打印信封

利用Excel的宏批量打印信封

利用Excel的宏批量打印信封Excel是一款功能强大的办公软件,而其强大的功能并不是都浮在表面上,需要我们在日常工作中不断地应用和挖掘,才能逐渐体会其博大精深之处。

在日常工作和生活中,书写信封是避免不了的,特别是文书部门,批量书写信封更是常有的事情,Excel可以帮助我们很好地完成这些琐碎的工作。

利用Excel批量打印信封大致可以分为四个步骤:一、设置打印页面进入Excel,新建一个工作簿,选定工作表“sheet1”。

第一步:定义打印页面大小⒈测量信封的实际长和宽;⒉在“文件”菜单下选择“页面设置”命令;⒊单击“选项”按钮,根据测量的实际尺寸自定义打印页面的大小。

第二步:在打印页面内制作打印面板通过调整行高、列宽以及在“页面设置”命令中调整页边距的数值,使邮政编码打印在信封左上角的方框内,定义收件人地址、收件人名称和寄件人名称、地址、邮编的打印位置(如图1所示)。

图1 打印页面注意事项:⒈邮政编码被分为六个单独的数字分别放在A1~F1六个单元格中;⒉为了便于在打印过程中不断变换打印内容,将收件人地址、收件人名称和寄件人名称、地址、邮编分别放置在单元格A3、A4、H5、H6、H7中,为了保证收件人名称位于信封的居中位置,利用Excel的“合并及居中”功能,使单元格A4~N4的格式为跨列居中。

二、输入打印内容选定工作表“sheet2”,根据打印内容建立如下表格,为了与“sheet1”中邮政编码的格式保持一致,邮政编码同样被分为六个单独的数字分别放入A~F 六列的单元格中,并根据格式要求在表格中逐行输入待打印的内容,(如图2)。

图2 打印内容三、建立宏所建立的宏主要要做两个步骤的工作,一是将工作表“sheet2”中的内容逐行调入工作表“sheet1”的打印面板中;二是通过打印机将设定内容打印出来。

宏的工作方式是调入一条内容打印一个信封,循环工作,直至将“sheet2”中的内容打印完毕。

根据上述分析,从“工具”菜单中选择“宏”命令,进入Visual Basic编辑器,编写一个名为“打印”的宏(此宏在实际工作中经过验证,运行正常),其代码如下:Sub 打印()Dim no1 As IntegerSheets("Sheet1").Select '进入打印页面no1 = 1no2 = InputBox("请输入打印内容行数:", "对话框", 1)If no2 = "" Then '如果在对话框中选择了取消按钮,则终止宏!Exit SubEnd IfDo While no1 <= no2Range("a1:f1").Value =Sheets("sheet2").Range("a" + Trim(Str(no1 + 1)) _+ ":" + "f" + Trim(Str(no1 + 1))).Value '更新邮政编码Range("a3").Value = Sheets("sheet2").Range _("g" + Trim(Str(no1 + 1))).Value '更新收件人地址Range("a4").Value = Sheets("sheet2").Range _("h" + Trim(Str(no1 + 1))).Value '更新收件人名称Range("h5").Value = Sheets("sheet2").Range _("i" + Trim(Str(no1 + 1))).Value '更新寄件人名称Range("h6").Value = Sheets("sheet2").Range _("j" + Trim(Str(no1 + 1))).Value '更新寄件人地址Range("h7").Value = Sheets("sheet2").Range _("k" + Trim(Str(no1 + 1))).Value '更新寄件人邮编ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, _Collate:=True '打印输出no1 = no1 + 1MsgBox "请放入新的信封后按任意键继续!", 48, "暂停提示"LoopEnd Sub注意事项:⒈在宏中引入了两个变量“no1”和“no2”,其中“no1”是一个计数器(no1始终小于等于no2),“no2”是通过对话框接收的一个数值,用户根据需要打印的信封个数(即工作表“sheet2”中打印内容的行数)输入这个数值,宏通过这个数值确定循环次数。

Word宏命令集.pdf

Word宏命令集.pdf

Word宏命令集1、Word宏实现删除Word文档中的所有超链接,打开Word的菜单工具->宏->Visual Basic 编辑器,或直接按快捷键Alt+F11,打开Visual Basic 编辑器,“插入”-“模块”。

代码:Sub RemoveHyperlinks()Dim oField As FieldFor Each oField In ActiveDocument.FieldsIf oField.Type = wdFieldHyperlink ThenoField.UnlinkEnd IfNextSet oField = NothingEnd Sub2、Word中的图片批量统一大小及同比例缩放有些时候,我们用Word来做一些图文混排的文档,需要正规的样式,例如图片大小一致。

下面的方法就是告诉我们如何来实现很多的图片统一大小,“插入”-“模块”。

代码:Sub setpicsize() '设置图片大小Dim n '图片个数On Error Resume Next '忽略错误For n = 1 To ActiveDocument.InlineShapes.Count 'InlineShapes类型图片ActiveDocument.InlineShapes(n).Height = 400 '设置图片高度为400pxActiveDocument.InlineShapes(n).Width = 300 '设置图片宽度300pxNext nFor n = 1 To ActiveDocument.Shapes.Count 'Shapes类型图片ActiveDocument.Shapes(n).Height = 400 '设置图片高度为400pxActiveDocument.Shapes(n).Width = 300 '设置图片宽度300pxNext nEnd Sub按比例缩放的方法:Sub setpicsize() '设置图片大小Dim n '图片个数On Error Resume Next '忽略错误For n = 1 To ActiveDocument.InlineShapes.Count 'InlineShapes类型图片ActiveDocument.InlineShapes(n).Height = 400 '设置图片高度为400pxActiveDocument.InlineShapes(n).Width = 300 '设置图片宽度300pxNext nFor n = 1 To ActiveDocument.Shapes.Count 'Shapes类型图片ActiveDocument.Shapes(n).Height = 400 '设置图片高度为400pxActiveDocument.Shapes(n).Width = 300 '设置图片宽度300pxNext nEnd Sub3、Word中英文标点符号互换-VBA源码实现打开“Visual Basic编辑器”或用快捷键Alt+F11,插入一个新的“模块”。

Word编程宏批量修改图片大小

Word编程宏批量修改图片大小

word批量修改图片大小借助word的宏功能可以很好完成这一任务,无论word里有多少图片,很容易就在一瞬间搞定.。

文档里面有几百张图片,规格都不一样,堆在文档里面很难看。

为美化文档,将图片规范化,都设置成425x320像素大小。

手工修改每张图片很费时间也费鼠标,所以,你得好好看看以下如何做了。

打开word,按下Alt+F8,出现宏界面,为新建的宏取名为AdjustPicWidthAndHeight点击编辑按钮,输入下面红色字体标出的内容Sub AdjustPicWidthAndHeight()'' AdvertisePublishAs 宏' 将广告发布导出为 PDF 和 XPS'Sub setpicsize() '设置图片大小Dim n '图片个数On Error Resume Next '忽略错误For n = 1 To ActiveDocument.InlineShapes.Count 'InlineShapes类型图片ActiveDocument.InlineShapes(n).LockAspectRatio = msoFalse '不锁定图片的纵横比ActiveDocument.InlineShapes(n).Height = 320 '设置图片高度为 320px ActiveDocument.InlineShapes(n).Width = 425 '设置图片宽度 425pxNext nFor n = 1 To ActiveDocument.Shapes.Count 'Shapes类型图片ActiveDocument.InlineShapes(n).LockAspectRatio = msoFalse '不锁定图片的纵横比ActiveDocument.Shapes(n).Height = 320 '设置图片高度为 320pxActiveDocument.Shapes(n).Width = 425 '设置图片宽度 425pxNext nEnd Subword批量修改图片大小——固定长宽篇这部分要说的是把word中的所有图片修改成固定的并且相同的长和宽!1、打开word,工具-宏-宏(或者直接按Alt+F8)进入宏的界面,如下面所示,输入一个宏名,宏名自己起,能记住就行!2、宏名起好了,单击“创建”进入Visual Basic 编辑器,输入如下代码并保存Sub setpicsize() '设置图片大小Dim n'图片个数On Error Resume Next '忽略错误For n = 1 To ActiveDocument.InlineShapes.Count 'InlineShapes类型图片ActiveDocument.InlineShapes(n).Height = 400 '设置图片高度为 400px ActiveDocument.InlineShapes(n).Width = 300 '设置图片宽度 300pxNext nFor n = 1 To ActiveDocument.Shapes.Count 'Shapes类型图片ActiveDocument.Shapes(n).Height = 400 '设置图片高度为 400px ActiveDocument.Shapes(n).Width = 300 '设置图片宽度 300pxNext nEnd Sub3、返回word,工具-宏-宏(或者直接按Alt+F8),再次进入宏的界面,选择刚才编辑好的宏,并单击“运行”按钮,就可以了!(图片多时,可能会花一些时间)word批量修改图片大小——按比例缩放篇这部分要说的是把word中的所有图片按比例缩放!具体操作同上,只是代码部分稍做修改,代码如下:Sub setpicsize() '设置图片大小Dim n'图片个数Dim picwidthDim picheightOn Error Resume Next '忽略错误For n = 1 To ActiveDocument.InlineShapes.Count 'InlineShapes类型图片picheight = ActiveDocument.InlineShapes(n).Heightpicwidth = ActiveDocument.InlineShapes(n).WidthActiveDocument.InlineShapes(n).Height = picheight * 0.8 '设置高度为1.1倍ActiveDocument.InlineShapes(n).Width = picwidth * 0.8 '设置宽度为1.1倍Next nFor n = 1 To ActiveDocument.Shapes.Count 'Shapes类型图片picheight = ActiveDocument.Shapes(n).Heightpicwidth = ActiveDocument.Shapes(n).WidthActiveDocument.Shapes(n).Height = picheight *0.8 '设置高度为1.1倍ActiveDocument.Shapes(n).Width = picwidth * 0.8 '设置宽度为1.1倍Next nEnd Sub。

Word如何设置A4纸上打印多张图片

Word如何设置A4纸上打印多张图片

Word如何设置A4纸上打印多张图片为了节约纸张怎么在A4纸上打印8张图片,具体的操作方法怎样的?接下来我们要好好利用Word排版将8张图打印到A4纸张上,下面小编就教你具体怎么做吧。

Word在A4纸上打印多张图片的方法①打开Word文档,点击“文件”→“页面设置”。

②在“页面设置”中把“页边距”上下左右全改为“0.5厘米”,再将方向改成“横向”接着按“确定”。

③然后插入要打印的图片,点击菜单栏“插入”→“图片”→“来自文件”。

④找到存放图片的路径选择图片,并点击“插入”。

⑤此时图片插入Word文档内。

⑥接着点击“工具”→“宏(M)”→“宏(M)”。

⑦此时弹出“宏”设置窗口,在“宏名”下输入名称,输入完成后点击“创建”如下图。

⑧弹出“Microsoft Visual Basic”复制下面代码粘贴到“代码”窗中保存。

Dim i As IntegerFor i = 1 To ActiveDocument.InlineShapes.CountWith ActiveDocument.InlineShapes(i).Height = 238 * 0.7.Width = 315 * 0.8.Borders(wdBorderTop).LineStyle = wdLineStyleSingle.Borders(wdBorderTop).LineWidth = wdLineWidth050pt.Borders(wdBorderTop).Color = wdColorAutomaticEnd WithNext i⑨再回到Word文档界面,单击菜单栏“工具”→“宏(M)”→“宏(M)”选择刚才输入的名称点击“运行”即可。

⑩此时Word文档内的图片都缩小到A4纸张能打印8张图的目标。

用WORD的邮件合并功能批量打印带照片证件一页显示多个信息和照片

用WORD的邮件合并功能批量打印带照片证件一页显示多个信息和照片

用WORD的邮件合并功能批量打印带照片证件一页显示多个信息和照片用WORD的邮件合并功能批量打印带照片证件&一页显示多个信息和照片工作证上面要求打印每个人的照片。

经过了解,具体工作要求是,打印一批工作证,员工基本信息来自数据库,包含员工信息的“员工数据库.mdb”中的“员工库”表如图①:员工照片放在e:\photo文件夹里,每位员工的照片文件名和编号相对应。

比如张三的照片名就是001.jpg。

马上想到了用Word邮件合并可以批量打印员工基本信息使用邮件合并也能实现此要求的方法。

实现思路:使用过邮件合并的人都知道实质上邮件合并使用的是域,那么要想实现照片的自动处理应该从域上找突破口。

在Word中插入图片可以用IncludePicture 域来实现,具体语法为IncludePicture "文件名"。

插入照片的功能解决之后,问题就转换为如何实现自动转换文件名的问题。

而照片的名称为了管理的方便通常都是使用编号作为文件名,这样使用编号域即可解决问题。

那么怎么实现文件名的自动转换呢?方法就是——把两个域嵌套起来!操作步骤:1.打开word,从视图菜单选择“工具栏”,“邮件合并”;2.从邮件合并工具栏上依次选择按钮,设置文档类型为“信函”;3.单击打开数据源按钮浏览选取准备好的数据库;4.然后设计主文档、排版、设置纸张,并通过邮件合并插入只包含文字的域,排版结果如图②。

5.下面是关键的一步:就是照片域的实现:先把光标定位在要插入照片的地方,按Ctrl+F9插入一个域,输入“IncludePicture"e:\\photo\\”再按Ctrl+F9插入一个域,输入“MergeField "编号"”,光标定位到这个域之后输入“.jpg"”,最后看到的结果应该是:{IncludePicture "e:\\photo\\{MergeField "编号"}.jpg"}。

VBA实现满纸比例打印A4扫描件图片,如果所装的word版本有输出PDF功能,还可实现JPG转PDF

VBA实现满纸比例打印A4扫描件图片,如果所装的word版本有输出PDF功能,还可实现JPG转PDF

使用说明
用VBA实现满纸比例打印A4扫描件图片,如果所装的word版本有输出PDF功能,还可实现JPG转PDF。

文档自带源码
首先Word要取消禁用“宏功能”
打开文档,会自动弹出“功能窗口”,里面的按钮有以下功能:
1、【载入本文件夹图片】
自动载入本文档同一级目录里的所有JPG文件
即:本文档所在的文件夹里的所有JPG文件
需要把本文档复制到目标文件夹使用
2、【载入自选多个图片】
弹出选择文件对话框,支持选择多个JPG文件
3、【快速打印】
自动打印整个文档
4、【清空文档】
清空整个文档的图片和文字
注:会自动将图片调整大小为A4规格
所以推荐用于打印A4扫描件,或用Word做PDF
如果关闭了"功能窗口",双击文档可以重新显示。

如何在一张A4纸里打印15张ppt课件 2009

如何在一张A4纸里打印15张ppt课件  2009

如何在一张A4纸里打印15张ppt课件~~~一、在一张A4纸里打印15张ppt课件:D1.打开想要打印的课件2.选择“文件”—〉“另存为”3.在“保存类型”里选择“设备无关位图”4.保存。

即课件都以图片格式存在。

5.新建一word文件,将其分成三栏,当然可以适当调整页边距。

6.“插入”—〉“图片”—〉“来自文件”,全选刚才保存的课件图片即可。

怎么样?~~跟我一样有经济头脑的你可以试试看:)二、点击“文件”菜单中的“打印预览”,在“打印内容”下拉选择框里,选择“每页6张幻灯片”即可。

三、Powerpoint是我们最常用到的课间展示、资料播放工具。

然而很多时候为了方便查看,希望能将PPT打印出来,但如果一页一张A4纸,又显得有些浪费。

今天就给大家提供一个小方法,可以批量将8页PPT合并至一张A4 纸中,非常节省资源。

首先,打开需要打印的PPT,为了打印出来的清晰度着想,可以将底板先全部去掉。

然后,选择文件-另存为,在文件类型里选择“jpg文件交换格式”,将每张幻灯片保存为图片。

在出现的提示窗口中,可以选择是否全部导出幻灯片。

完成以后,在保存的位置就会出现一个文件夹,里面有每张幻灯片的图片,并且已经按序号排好。

接着,新建一个word文档,选择文件-页面设置。

将上下边距改为1厘米,左右边距改为2厘米,点击确定即可。

页面设置完成后,选择“格式-分栏”,将页面分为2栏。

接着点击插入图片,选择之前保存PPT的图片文件夹,选择需要的图片导入便可以。

此时,PPT图片会自动排列在word文档中,一个A4页面排列8张,非常便于打印。

小提示:利用分栏功能,可以实现批量的将Word中的图片缩小50%的效果。

如果一个页面中,并不满8小页,也可以适当调整页边距来调整图片大小。

ExcelVBA编程与宏自动打印如何设定宏的自动打印和批量打印

ExcelVBA编程与宏自动打印如何设定宏的自动打印和批量打印

ExcelVBA编程与宏自动打印如何设定宏的自动打印和批量打印Excel VBA编程与宏自动打印如何设定宏的自动打印和批量打印Microsoft Excel是广泛使用的电子表格软件之一,而借助Excel的VBA编程和宏功能,用户可以轻松自动化各种重复性任务,比如自动打印和批量打印文档。

本文将介绍如何使用Excel VBA编程和宏来设置自动打印和批量打印的功能。

自动打印是指在特定条件下,Excel会自动执行打印操作,而不需要用户手动操作。

一般情况下,用户可以设置特定的条件,比如在保存文件时自动打印、在工作表被更新时自动打印等。

下面是设定宏的自动打印的步骤:第一步,打开Excel软件并进入“开发工具”选项卡。

如果你的Excel 软件没有显示“开发工具”选项卡,你需要先进行设置。

在Excel中,点击“文件”选项卡,在弹出的菜单中选择“选项”,然后在弹出的选项对话框中点击“自定义功能区”。

在右侧的菜单栏中勾选“开发工具”,最后点击“确定”按钮完成设置。

第二步,点击“开发工具”选项卡中的“Visual Basic”按钮,进入VBA 编辑器环境。

第三步,进入VBA编辑器后,你需要创建一个宏。

在VBA编辑器的左侧“项目资源管理器”窗口中,右键点击任意一个项目,然后选择“插入”->“模块”。

在弹出的模块窗口中,你可以输入VBA代码来编写宏。

第四步,编写宏的代码。

在VBA编辑器的右侧窗口中,你可以编写自己的VBA代码实现自动打印的功能。

比如,你可以使用以下的VBA代码来实现在保存时自动打印的功能:```Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)'设置自动打印的代码ActiveSheet.PrintOutEnd Sub```在这个例子中,我们使用了Workbook_BeforeSave事件来在保存文件时触发打印操作。

VBA中的打印设置与批量打印技巧

VBA中的打印设置与批量打印技巧

VBA中的打印设置与批量打印技巧在Excel中,我们常常需要对工作表进行打印,打印设置的灵活性和批量打印的效率对于提高工作效率非常重要。

VBA (Visual Basic for Applications) 是一种可以在Microsoft Office套件中的各个应用程序中使用的编程语言,能够帮助我们自动化处理任务,包括打印设置和批量打印。

本文将介绍VBA中常用的打印设置以及一些实用的批量打印技巧,帮助您提高工作效率。

1. 打印设置VBA中的打印设置功能丰富,可以根据需求自定义打印页面、页眉页脚、打印区域等。

1.1 打印页面设置使用VBA,您可以轻松地对打印页面进行设置。

例如,您可以设置纸张大小、方向、边距等。

```vbaSub 页面设置()With ActiveSheet.PageSetup.PaperSize = xlPaperA4 ' 设置纸张大小为A4.Orientation = xlLandscape ' 设置横向打印.LeftMargin = Application.InchesToPoints(0.5) ' 设置左边距为0.5英寸.RightMargin = Application.InchesToPoints(0.5) ' 设置右边距为0.5英寸.TopMargin = Application.InchesToPoints(0.75) ' 设置上边距为0.75英寸.BottomMargin = Application.InchesToPoints(0.75) ' 设置下边距为0.75英寸 End WithEnd Sub```1.2 设置页眉页脚通过VBA,您可以在打印时添加页眉页脚,为打印内容提供更多信息。

```vbaSub 页眉页脚设置()With ActiveSheet.PageSetup.LeftHeader = "左侧页眉" ' 设置左侧页眉.CenterHeader = "中间页眉" ' 设置中间页眉.RightHeader = "右侧页眉" ' 设置右侧页眉.LeftFooter = "左侧页脚" ' 设置左侧页脚.CenterFooter = "中间页脚" ' 设置中间页脚.RightFooter = "右侧页脚" ' 设置右侧页脚End WithEnd Sub```1.3 打印区域设置有时候,我们不需要将整个工作表都打印出来,而只希望打印某个特定的区域。

VBA中的文件打印和批量打印方法介绍

VBA中的文件打印和批量打印方法介绍

VBA中的文件打印和批量打印方法介绍VBA是一种用于Microsoft Office应用程序的编程语言,它可以帮助用户更有效地处理和管理数据。

在VBA中,文件打印和批量打印是常见的任务,本文将介绍如何使用VBA中的方法来实现这些功能。

一、文件打印方法介绍VBA中的文件打印方法允许用户通过编程方式控制打印操作,可以选择性地打印特定的文档,设置打印选项以及指定打印份数等。

1. 使用PrintOut方法打印当前活动文档在VBA中,可以使用PrintOut方法来打印当前活动的文档。

以下是一个示例代码:```Sub PrintActiveDocument()ActiveDocument.PrintOutEnd Sub```通过运行上述代码,VBA会自动打印当前活动的文档。

2. 使用PrintOut方法打印指定的文档如果想要打印指定的文档,可以使用PrintOut方法,并指定要打印的文档对象。

以下是一个示例代码:```Sub PrintSpecificDocument()Dim doc As ObjectSet doc = Documents.Open("C:\Documents\Sample.docx")doc.PrintOutdoc.Close SaveChanges:=FalseEnd Sub```上述代码中,首先通过Documents.Open方法打开要打印的文档,然后使用doc.PrintOut方法打印该文档。

最后,使用doc.Close方法关闭文档,并选择不保存更改。

3. 设置打印选项VBA中的文件打印方法还支持设置打印选项,如打印份数、打印范围、纸张类型等。

以下是一个示例代码:```Sub SetPrintOptions()ActiveDocument.PrintOut Copies:=2, Range:=wdPrintFromTo, Pages:="1-3", _Item:=wdPrintDocumentWithMarkup, PaperSize:=wdPaperA4 End Sub```上述代码中,通过传递不同的参数值给PrintOut方法,可以设置打印选项。

批量打印

批量打印

打印图纸,不折不扣的体力活。

最多一次打了600多张图,打印机都因"体力不支"中途休息了几次,如果不是用程序批打,估计我也得累个半死。

下面贴出打印过程的代码,加个for循环就可以批打了。

简单说明一下打印函数PrinterName - 打印机名称Styles - 样式表名称MediaName - 纸张大小Copies - 打印份数AutoMedia - 自动纸张开关AutoRotate - 自动旋转,纵向/横向AutoClose - 打印完毕关闭文档AutoFrame - 自动判断图框,主要针对图框为块的情形打印过程并没有提供全部的AUTO CAD打印选项,因为我一般用不到,比如"打印偏移"、"打印到文件"我从来不用的,如果需要可以添加进去。

程序会根据指定块名查找图框,也可以根据块的纵横比例自动判断是否为图框,然后按块打印,一张图纸中允许有多个图框;对于编组(Group)形式的图框,指定编组名即可如果没有找到任何图框块或编组时,按图纸范围打印另外,打印时会先预览,然后由用户选择是否打印,避免打错。

[代码如下] - By:忽又一天 /suddenday/Sub QuickPlot()Call PlotFunction("SHARP AR-M256", "", "A3", 1, True, True, False, True)End SubSub Plot2PDF()Call PlotFunction("pdfFactory Pro", "acad.ctb", "", 1, True, True, False, True)End SubSub PlotA4()Call PlotFunction("SHARP AR-M256", "acad.ctb", "A4", 1, False, True, False, True)End Sub'快速打印/批量打印Public Sub PlotFunction(PrinterName As String, Styles As String, MediaName As String, Copies As Integer, _AutoMedia As Boolean, AutoRotate As Boolean, AutoClose As Boolean, AutoFrame As Boolean)On Error Resume NextDim ptMin As Variant, ptMax As VariantDim Ent As AcadEntityDim PlotCount As IntegerSet objDoc = ThisDrawing.Application.ActiveDocumentSet objLayout = youts.Item("Model")Set objPlot = objDoc.PlotThisDrawing.Application.ZoomExtents' 设置打印机If Not Trim(PrinterName) = ""ThenobjLayout.ConfigName = PrinterNameElseExit SubEnd If' 设置打印样式表If Not Trim(Styles) = ""ThenobjLayout.StyleSheet = StylesElseobjLayout.StyleSheet = "acad.ctb"End If' 设置图纸尺寸If AutoMedia ThenobjLayout.CanonicalMediaName = "A3"ElseIf Not Trim(MediaName) = ""ThenobjLayout.CanonicalMediaName = MediaName ElseobjLayout.CanonicalMediaName = "A3"End IfEnd If' 设置图纸单位objLayout.PaperUnits = acMillimeters'objLayout.PaperUnits = acInches' 设置默认图纸打印方向'objLayout.PlotRotation = ac0degrees '纵向'objLayout.PlotRotation = ac180degreesobjLayout.PlotRotation = ac90degrees '横向'objLayout.PlotRotation = ac270degrees' 设置图纸打印比例objLayout.StandardScale = acScaleToFiteStandardScale = True'使用标准打印比例'eStandardScale = False '使用自定义打印比例' 设置自定义打印比例'objLayout.SetCustomScale txtNumerator.Value, txtDenominator.Value' 设置图纸是否居中打印objLayout.CenterPlot = True' 打印时使用图形文件中的线宽objLayout.PlotWithLineweights = True' 设置是否应用打印样式objLayout.PlotWithPlotStyles = True' 打印时隐藏图纸空间对象objLayout.PlotHidden = False' 设置图纸打印份数If Copies >= 1 ThenobjPlot.NumberOfCopies = CInt(Copies)ElseobjPlot.NumberOfCopies = 1End If' 将打印错误报告切换为静默错误模式,以便不间断地执行打印任务objPlot.QuietErrorMode = True' 重新生成当前图形objDoc.Regen acAllViewports' 设置前台打印,使打印任务按打印顺序依次发送到打印机 objDoc.SetVariable "BACKGROUNDPLOT", 0PlotCount = 0 '打印计数For Each Ent In objDoc.ModelSpaceIf TypeOf Ent Is AcadBlockReference ThenIf IsFrame(Ent, AutoFrame) = True AndobjDoc.Blocks().count > 0 ThenEnt.GetBoundingBox ptMin, ptMaxDebug.Print & "--" &objDoc.Blocks().count' 将三维点转化为二维点坐标ReDim Preserve ptMin(0 To 1)ReDim Preserve ptMax(0 To 1)' 设置打印窗口ThisDrawing.ActiveLayout.SetWindowToPlot ptMin, ptMaxobjLayout.PlotType = acWindowIf Abs(ptMax(0) - ptMin(0)) < Abs(ptMax(1) - ptMin(1)) ThenIf AutoMedia ThenobjLayout.CanonicalMediaName = "A4"If AutoRotate Then objLayout.PlotRotation = ac0degreesEnd If' 完全预览并提示打印objPlot.DisplayPlotPreview acFullPreview UserSel = MsgBox("是否打印预览? "& Chr(13) & Chr(13) & "打印到:" & objLayout.ConfigName & _" 大小:" & objLayout.CanonicalMediaName & " 方式:acWindow(" & objLayout.PlotType & ") " & _Chr(13) & Chr(13) & "选择[取消]退出程序!", vbYesNoCancel, "打印选项")If UserSel = vbYes ThenobjPlot.PlotToDevice objLayout.ConfigName PlotCount = PlotCount + 1ElseIf UserSel = vbCancel ThenExit ForEnd IfEnd IfEnd IfNext Ent' 图框为编组(Group)对象时Dim FrmGrp As AcadGroupDim TptMin, TptMax As Variant' 按编组名称查找图框编组对象For Each FrmGrp In ThisDrawing.GroupsIf IsFrame(FrmGrp, False) And FrmGrp.count > 0 Then Debug.Print & " [Items]:" & FrmGrp.count & "----group"' 得到图框边界点坐标FrmGrp.Item(0).GetBoundingBox ptMin, ptMax For i = 1 To FrmGrp.count - 1FrmGrp.Item(i).GetBoundingBox TptMin, TptMax ReDim Preserve TptMin(0 To 1)ReDim Preserve TptMax(0 To 1)For j = 0 To 1If TptMin(j) < ptMin(j) ThenptMin(j) = TptMin(j)End IfIf TptMax(j) > ptMax(j) ThenptMax(j) = TptMax(j)End IfNext ji = i + 1Next' 将三维点转化为二维点坐标ReDim Preserve ptMin(0 To 1)ReDim Preserve ptMax(0 To 1)' 设置打印窗口ThisDrawing.ActiveLayout.SetWindowToPlot ptMin, ptMaxobjLayout.PlotType = acWindowIf Abs(ptMax(0) - ptMin(0)) < Abs(ptMax(1) - ptMin(1)) ThenIf AutoMedia Then objLayout.CanonicalMediaName = "A4"If AutoRotate Then objLayout.PlotRotation =ac0degreesEnd If' 完全预览并提示打印objPlot.DisplayPlotPreview acFullPreviewUserSel = MsgBox("是否打印预览? "& Chr(13) & Chr(13) & "打印到:" & objLayout.ConfigName & _" 大小:" & objLayout.CanonicalMediaName & " 方式:acWindow(" & objLayout.PlotType & ") " & _Chr(13) & Chr(13) & "选择[取消]退出程序!", vbYesNoCancel, "打印选项")If UserSel = vbYes ThenPlotCount = PlotCount + 1objPlot.PlotToDevice objLayout.ConfigNameElseIf UserSel = vbCancel ThenExit ForEnd IfEnd IfNext FrmGrp' 没有找到图框时按范围打印If PlotCount = 0 And objDoc.ModelSpace.count > 0 ThenptMax = ThisDrawing.GetVariable("EXTMAX")ptMin = ThisDrawing.GetVariable("EXTMIN")' 图形范围内无实体则退出If ptMax(0) = ptMin(0) Or ptMax(1) = ptMin(1) ThenExit SubEnd If' 设置范围打印objLayout.PlotType = acExtents' 对纵向的图纸设置If Abs(ptMax(0) - ptMin(0)) < Abs(ptMax(1) - ptMin(1)) ThenIf AutoMedia Then objLayout.CanonicalMediaName = "A4"If AutoRotate Then objLayout.PlotRotation =ac0degreesEnd If' 完全预览并提示打印objPlot.DisplayPlotPreview acFullPreviewUserSel = MsgBox("是否打印预览? "& Chr(13) & Chr(13)& "打印到:" & objLayout.ConfigName & _" 大小:" & objLayout.CanonicalMediaName & " 方式:acExtents(" & objLayout.PlotType & ") " & _Chr(13) & Chr(13) & "选择[取消]退出程序!", vbYesNoCancel, "打印选项")If UserSel = vbYes ThenobjPlot.PlotToDevice objLayout.ConfigNameElseIf UserSel = vbCancel ThenExit SubEnd IfEnd If' 关闭文档 False 为不保存修改If AutoClose Then objDoc.Close False, End SubPublic Function IsFrame(entobj As Object, AutoMode As Boolean) As Boolean '判断是否为图框On Error Resume NextIsFrame = FalseDim i As IntegerDim FrmNameList As VariantFrmNameList = "blkFrame,A1,A2,A3,A4,PC_PAPER_DIC"'图框块、编组名列表FrmNameList = Split(FrmNameList, ",")For i = 0 To UBound(FrmNameList)If = FrmNameList(i) ThenIsFrame = TrueExit ForEnd IfNext'块名不符时由大小比例判断是否为图框(可能会误判,不过几率不高) If IsFrame = False And AutoMode And entobj.ObjectName = "AcDbBlockReference"Thenentobj.GetBoundingBox ptMin, ptMaxDebug.Print ptMin(0) & "--" & ptMax(0)If Abs((ptMax(1) - ptMin(1)) / (ptMax(0) - ptMin(0)) - 1.414) < 0.01 Or Abs((ptMax(1) - ptMin(1)) / (ptMax(0) - ptMin(0)) - 0.707) < 0.01 ThenIsFrame = TrueEnd IfEnd IfEnd Function。

78CADVBA批量打印

78CADVBA批量打印

78CADVBA批量打印'批量打印Sub 打印()On Error Resume NextDim ptMin, ptMax, 块属性, 打印尺寸 As VariantDim 对象 As AcadEntityDim 已打印张数, 是否打印, 比例前项 As IntegerDim 文档 As AcadDocumentDim 布局 As AcadLayoutDim 出图布局 As AcadPlot' Dim 是否打印 As ByteDim 打印份数 As String' Dim 块属性 As VariantSet 文档 = ThisDrawing.Application.ActiveDocumentSet 布局 = 文档.Layouts.Item("Model")Set 出图布局 = 文档.Plot'更新打印机、规范介质和打印样式表信息,以反映当前系统状态。

布局.RefreshPlotDeviceInfo' 设置图纸单位布局.PaperUnits = acMillimeters' 设置图纸是否居中打印布局.CenterPlot = True' 打印时使用图形文件中的线宽布局.PlotWithLineweights = True'返回默认打印机配置名或指定默认打印机块属性 = 布局.ConfigName '布局.ConfigName="打印机名称"'获取指定打印设备的所有可用标准介质的名称(正使用打印机能打印的所有打印尺寸)块属性 = 布局.GetCanonicalMediaNames()'获取所有可用的打印设备名称。

块属性 = 布局.GetPlotDeviceNames()已打印张数 = 0 '打印计数For Each 对象 In 文档.ModelSpaceIf TypeOf 对象 Is AcadBlockReference ThenIf 对象.EffectiveName = "图纸边框" Then ''从边框块属性中获取图纸规格大小,块属性(3).Value为图纸规格如“A3”,根据边框块定义不同,用不同的方法获取块属性 = 对象.GetDynamicBlockProperties '获取动态块属性值'判断打印机打印尺寸中是否包含图纸规格尺寸For Each 打印尺寸 In 布局.GetCanonicalMediaNames()If 打印尺寸 = 块属性(3).Value Then布局.CanonicalMediaName = 块属性(3).Value '图纸规格如“A3”Exit ForEnd IfNext 打印尺寸If 布局.CanonicalMediaName = 块属性(3).Value Then '如果打印机能打印该图纸,则开始'返回图元对象边框的最大和最小点,打印窗口范围对象.GetBoundingBox ptMin, ptMax' 将三维点转化为二维点坐标ReDim Preserve ptMin(0 To 1)ReDim Preserve ptMax(0 To 1)'比较边框X、Y尺寸大小,X>Y为横向,否则为纵向打印If ptMax(0) - ptMin(0) > ptMax(1) - ptMin(1) Then布局.PlotRotation = ac0degrees '横向比例前项 = Choose(CByte(Right(块属性(3).Value, 1)) + 1, 1179, 831, 584, 410, 297)Else布局.PlotRotation = ac90degrees '纵向比例前项 = Choose(CByte(Right(块属性(3).Value, 1)) + 1, 831, 584, 410, 297, 200)End If布局.UseStandardScale = False '使用自定义打印比例'' ' 设置自定义打印比例布局.SetCustomScale 比例前项, ptMax(0) - ptMin(0)' 布局.UseStandardScale = ac10_1 '打印比例If 打印份数 = "" Then 打印份数 = InputBox("请输入打印份数!", "录入询问", "1") '打印份数If 打印份数 = "" Then 打印份数 = "1"出图布局.NumberOfCopies = CInt(打印份数)' 设置打印窗口ThisDrawing.ActiveLayout.SetWindowToPlot ptMin, ptMax ' 重新生成当前图形文档.Regen acAllViewports' 完全预览并提示打印出图布局.DisplayPlotPreview acPartialPreview 'acFullPreview If 是否打印 = Empty Then 是否打印 = MsgBox("是否打印? " & Chr(13) & Chr(13) & "打印到:" & 布局.ConfigName & _ " 大小:" & 布局.CanonicalMediaName & Chr(13) & Chr(13) & "选择[取消]退出程序!", vbYesNoCancel, "打印选项") If 是否打印 = vbYes Then出图布局.PlotToDevice 布局.ConfigName已打印张数 = 已打印张数 + 1ElseIf 是否打印 = vbCancel ThenExit ForEnd IfElseMsgBox "“" & 布局.ConfigName & "”不能打印“" & 块属性(3).Value & "”规格图纸!" _& Chr(13) & "请选择合适打印机!", , "打印错误提醒!"End IfEnd IfEnd IfNext 对象MsgBox "共打印" & 已打印张数 & "张", , "打印张数统计"End Sub。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

巧用宏命令,完美实现一页A4纸打印多张高清照片或幻灯片莘县一中张仿刚工作中我们经常遇到这些情况:学籍库中2000多张照片,如何有序的打印在A4纸上,每张36张且把学籍号有序的自动填充到照片下方?家庭外出游玩的照片如何方便的按规定的尺寸打印在A4像纸上?一个ppt文件有96张幻灯片,如何清晰的在A4纸中一页打8张ppt(甚至更多张)?本文就以实例解决上述问题。

首先我们需要在word中安装“自动排版”宏命令,方法如下:word→工具→宏→录制新宏→宏名macrol 改为“自动排版”→确定→界面出现蓝色对话框,停止录制,然后word→工具→宏→选中宏“自动排版”→编辑,删除尾行的“end sub”,然后在尾行复制粘贴下列内容,关闭Visual Basic编辑器,这样自动排版的宏命令就已经制作好了。

'【调整页边距及页眉页脚距,适用于A4纸】With ActiveDocument.Styles(wdStyleNormal).FontFarEast=.NameAscii Then.NameAscii=""End If.NameFarEast=""End WithWith ActiveDocument.PageSetup.LineNumbering.Active=False.Orientation=wdOrientPortrait.TopMargin=CentimetersToPoints(1.6).BottomMargin=CentimetersToPoints(0.9).LeftMargin=CentimetersToPoints(1.4).RightMargin=CentimetersToPoints(1).Gutter=CentimetersToPoints(0).HeaderDistance=CentimetersToPoints(0.5).FooterDistance=CentimetersToPoints(0.9).PageWidth=CentimetersToPoints(21).PageHeight=CentimetersToPoints(29.7).FirstPageTray=wdPrinterDefaultBin.OtherPagesTray=wdPrinterDefaultBin.SectionStart=wdSectionNewPage.OddAndEvenPagesHeaderFooter=False.DifferentFirstPageHeaderFooter=False.VerticalAlignment=wdAlignVerticalTop.SuppressEndnotes=False.MirrorMargins=False.TwoPagesOnOne=False.BookFoldPrinting=False.BookFoldRevPrinting=False.BookFoldPrintingSheets=1.GutterPos=wdGutterPosLeft.LayoutMode=wdLayoutModeLineGridEnd With'【加页码,页脚居中处】Selection.Sections(1).Footers(1).PageNumbers.Add PageNumberAlignment:=_wdAlignPageNumberCenter,FirstPage:=TrueIf ActiveWindow.View.SplitSpecial<>wdPaneNone ThenActiveWindow.Panes(2).CloseEnd IfIf ActiveWindow.ActivePane.View.Type=wdNormalView Or ActiveWindow._ActivePane.View.Type=wdOutlineView ThenActiveWindow.ActivePane.View.Type=wdPrintViewEnd IfActiveWindow.ActivePane.View.SeekView=wdSeekCurrentPageHeaderIf Selection.HeaderFooter.IsHeader=True ThenActiveWindow.ActivePane.View.SeekView=wdSeekCurrentPageFooterElseActiveWindow.ActivePane.View.SeekView=wdSeekCurrentPageHeaderEnd IfIf ActiveWindow.ActivePane.View.Type=wdNormalView Or ActiveWindow._ActivePane.View.Type=wdOutlineView ThenIf ActiveWindow.Panes.Count=2ThenActiveWindow.Panes(2).CloseEnd IfActiveWindow.View.SplitSpecial=wdPaneCurrentPageHeaderElseActiveWindow.View.SeekView=wdSeekCurrentPageHeaderEnd IfActiveWindow.ActivePane.View.SeekView=wdSeekMainDocumentActiveWindow.ActivePane.VerticalPercentScrolled=0'【调整每张幻灯片的大小为高184宽262,也许还有更佳的值,可自己尝试】Dim i As IntegerFor i=1To ActiveDocument.InlineShapes.CountActiveDocument.InlineShapes(i).Height=184ActiveDocument.InlineShapes(i).Width=262Next i'【给每张幻灯片加边框】Selection.HomeKey Unit:=wdStoryDim j As IntegerFor j=1To ActiveDocument.InlineShapes.CountSelection.MoveRight Unit:=wdCharacter,Count:=1,Extend:=wdExtendWith Selection.InlineShapes(1)With.Borders(wdBorderLeft).LineStyle=wdLineStyleSingle.LineWidth=wdLineWidth050pt.Color=wdColorAutomaticEnd WithWith.Borders(wdBorderRight).LineStyle=wdLineStyleSingle.LineWidth=wdLineWidth050pt.Color=wdColorAutomaticEnd WithWith.Borders(wdBorderTop).LineStyle=wdLineStyleSingle.LineWidth=wdLineWidth050pt.Color=wdColorAutomaticEnd WithWith.Borders(wdBorderBottom).LineStyle=wdLineStyleSingle.LineWidth=wdLineWidth050pt.Color=wdColorAutomaticEnd With.Borders.Shadow=FalseEnd WithWith Options.DefaultBorderLineStyle=wdLineStyleSingle.DefaultBorderLineWidth=wdLineWidth050pt.DefaultBorderColor=wdColorAutomaticEnd WithSelection.MoveRight Unit:=wdCharacter,Count:=1Next jEnd Sub一、在一页A4纸上打印多张高清照片以建立学籍为例,照片放在桌面新建文件夹内,本例以36张照片为例,2000张的一样可以一次全部导入,方法完全相同。

第一步:修改宏文件。

工具→宏→宏“自动排版”,改变照片宽度和高度,其他不变,第二步:Word。

插入→图片→来自文件,可用快捷键“Ctrl+A”全选学籍库所有图片,插入。

第三步:word。

工具—→宏—→宏,选择宏“自动排版”,运行。

效果如下:第四步:word。

文件→页面设置→上下左右边距可调为2cm。

全选文档(ctrl+A),点居中图标。

第五步:word。

添加加文件名(学籍号)。

首先在第一行照片后面击两次回车键,空出一行,插入表格(1行×6列),调整表格端线,使得空格对应每张照片下面。

如下图:然后选中表格左上角的十字全选表格,击右键,表格属性→边框和底纹→边框→设置为“无”→确定。

再次全选表格,格式→项目和符号→编号→选中左起第2各编号→自定义→编号格式在灰色闪动的“1”前添加“20103725000”,再把灰色“1”后面的黑点删掉。

第六步:word。

自动填充学籍号。

全选中刚才自动填充好表格,复制→在每行照片后面粘贴。

由于word只支持1—9999四位数字,当遇到更位时,即学籍尾号为“10”、“100”、“1000”时要重新设定。

如出现“00010”需改为“0010”,则选中该生下方的编号→格式或右键→项目符号和编号→自定义编号→编号格式减去一个0→起始编号改为10→确定,同理出现100、1000时也要改两次。

另外出现断码时按同样的方法操作。

二、在一页A4纸上打印8张ppt幻灯片常常需要将PPT的内容以讲义形式打印出来,但PPT打印设置里只支持一页纸上打印1,2,3,4,6,9页幻灯片几种形式,而且格式几乎无法调整而且格式几乎无法调整。

笔者尝试打开ppt文件后,执行:文件→打印→对话框“打印内容”→选择“讲义”→“每页幻灯片数”选择9→预览结果很不理想,幻灯片之间的间距过大,从而使得幻灯片内容太小且不清晰。

本法仍然采取宏命令进行操作。

第一步:Powerpoint:文件→另存为→windows图元文件,如果PPT有背景,可先将背景模板改为白版形式,为方便阅读,可先在ppt中添加幻灯片编号后再另存为图片元件。

第二步:Word:插入→图片→来自文件,用快捷键“Ctrl+A”全选刚才产生的所有图片,插入。

第三步:Word:工具→宏→宏“自动排版”,运行,如右图。

相关文档
最新文档