如何通过VBA仅打印Access多标签窗体首标签内的矩形框?
当然可以实现!我经常帮人处理这类Access打印需求,下面给你两种实用的VBA方案,你可以根据自己的情况选择:
方法一:直接打印窗体上的矩形框区域
这种方法适合不需要调整格式,只想快速打印矩形框所在区域的场景,核心是定位矩形框的绝对位置,然后指定打印范围。
步骤与代码:
Sub PrintReceiptRectangle() Dim targetForm As Form Dim tabControl As Control Dim receiptRect As Control Dim printLeft As Integer Dim printTop As Integer Dim printWidth As Integer Dim printHeight As Integer ' 替换成你的窗体名称 Set targetForm = Forms("YourFormName") ' 获取首个标签页控件(替换成你的标签页控件名) Set tabControl = targetForm.Controls("tabMain") ' 获取矩形框控件(替换成你的矩形框控件名) Set receiptRect = tabControl.Pages(0).Controls("rectReceipt") ' 计算矩形框在窗体上的绝对位置(标签页本身有偏移,必须加上) printLeft = tabControl.Left + receiptRect.Left printTop = tabControl.Top + receiptRect.Top printWidth = receiptRect.Width printHeight = receiptRect.Height ' 设置打印机的打印区域参数 With Printer .Left = 0 .Top = 0 .Width = printWidth .Height = printHeight .Zoom = 100 ' 可根据打印效果调整缩放比例 End With ' 打印指定区域的内容(用acViewPreview可以先预览效果) targetForm.PrintForm acPrintRangeFromTo, printLeft, printTop, printLeft + printWidth, printTop + printHeight ' 释放对象,避免内存泄漏 Set receiptRect = Nothing Set tabControl = Nothing Set targetForm = Nothing End Sub
注意事项:
- 一定要把代码里的
YourFormName、tabMain、rectReceipt替换成你实际的窗体和控件名称。 - 测试时可以把打印方式改成
acViewPreview,先预览效果再正式打印,避免浪费纸张。 - 如果矩形框里的控件被其他元素遮挡,打印前要确保它们处于可见状态。
方法二:通过临时报表打印(更灵活)
如果你的收据格式比较复杂,需要调整字体、排版,这种方法更合适——先把矩形框里的内容复制到提前设计好的报表里,再打印报表,能更好地控制打印格式。
步骤与代码:
- 先在Access里创建一个空白报表(比如命名为
rptReceipt),根据你的收据内容添加对应的控件(比如收据编号、金额、日期等文本框)。 - 用下面的VBA代码把窗体矩形框里的内容复制到报表,然后打印:
Sub PrintReceiptViaReport() Dim targetForm As Form Dim tabControl As Control Dim receiptRect As Control Dim receiptReport As Report ' 替换成你的窗体名称 Set targetForm = Forms("YourFormName") Set tabControl = targetForm.Controls("tabMain") Set receiptRect = tabControl.Pages(0).Controls("rectReceipt") ' 打开报表设计视图,准备填充内容 DoCmd.OpenReport "rptReceipt", acViewDesign Set receiptReport = Reports("rptReceipt") ' 把矩形框内的控件内容复制到报表对应控件(示例,根据你的实际控件调整) receiptReport.txtReceiptNo.Value = receiptRect.Controls("txtReceiptNo").Value receiptReport.txtAmount.Value = receiptRect.Controls("txtAmount").Value receiptReport.txtIssueDate.Value = receiptRect.Controls("txtIssueDate").Value ' 其他收据内容控件依次复制... ' 保存报表并关闭设计视图,然后打印(acViewPreview是预览,acViewNormal是直接打印) DoCmd.Close acReport, "rptReceipt", acSaveYes DoCmd.OpenReport "rptReceipt", acViewPreview ' 释放对象 Set receiptReport = Nothing Set receiptRect = Nothing Set tabControl = Nothing Set targetForm = Nothing End Sub
注意事项:
- 报表里的控件名称要和窗体矩形框内的控件名称对应,或者你可以根据需求自定义映射关系。
- 这种方法可以自由调整报表的排版、字体大小,打印出来的效果会更专业。
内容的提问来源于stack exchange,提问作者Muhammad Jawad
相关产品推荐
相关产品推荐

