【问题标题】:Change printer settings in reports更改报告中的打印机设置
【发布时间】:2019-03-26 10:22:02
【问题描述】:

当我更新我的 Access 应用程序时,我需要更改每台 PC 上的打印机设置 - 匹配附加的 labelprinters 名称,在每台打印机上使用特定的预定义标签,然后调整页边距。
我想自动化这个过程。但我在获取报告以保存设置时遇到问题。

想法是将打印机设置导出到表格(完成),更新应用程序,然后读取每个报告的“旧”设置并将其保存为更新的一部分。

问题是,我无法让 Access 2010 保存设置。

有什么想法吗?

Dim rpt As Access.Report
Dim rstUpdRptSettings As ADODB.Recordset
Dim NameOfPrinter As String

Set rstUpdRptSettings = New ADODB.Recordset

rstUpdRptSettings.Open "Select * From tblUpdRptSettings", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

Do While Not rstUpdRptSettings.EOF
    DoCmd.OpenReport ReportName:=rstUpdRptSettings!ReportName, View:=acViewDesign, WindowMode:=acHidden
    Set rpt = Reports(rstUpdRptSettings!ReportName)
    NameOfPrinter = rstUpdRptSettings!PrinterName

    With rpt
        .Printer = Application.Printers(NameOfPrinter)
        .Printer.TopMargin = rstUpdRptSettings!TopMargin
        .Printer.BottomMargin = rstUpdRptSettings!BottomMargin
        .Printer.LeftMargin = rstUpdRptSettings!LeftMargin
        .Printer.RightMargin = rstUpdRptSettings!RightMargin
        .Printer.PaperSize = rstUpdRptSettings!PaperSize
    End With
    DoCmd.Close acReport, rpt.Name, acSaveYes
    rstUpdRptSettings.MoveNext
Loop

运行代码不会更改任何设置 - 也不会更改打印机名称、边距或 PaperSize。

【问题讨论】:

  • rpt.Printer 是一个对象,而不是一个值。所以你需要Set .Printer = Application.Printers(NameOfPrinter)。不过,不确定这是否是唯一的问题。

标签: ms-access vba ms-access-2010


【解决方案1】:

感谢您的评论。

我现在通过将这个添加到代码中解决了这个问题:

If .DefaultView = 0 Then
    .DefaultView = 1
Else
    .DefaultView = 0
End If
'Set it back
If .DefaultView = 0 Then
    .DefaultView = 1
Else
    .DefaultView = 0
End If

我在这里找到了解释和代码(感谢 Daniel): https://social.msdn.microsoft.com/Forums/sqlserver/en-US/8061fb4a-2e5f-4abe-a1ab-493c3d733e82/set-report-margins-using-vba?forum=accessdev

回答者: Daniel Pineault,2010-2016 年微软 MVP 专业支持:http://www.cardaconsultants.com MS Access 提示和代码示例:http://www.devhut.net

【讨论】:

  • 有趣。请将论坛主题中的相关部分添加到您的答案中,以防链接失效。你已经有了归属地。 -- 注意:你可以用 .DefaultView = 1 - .DefaultView 代替 If/Else。
  • 安德烈 - 这是真的。 Daniel:“这是最奇怪的事情。如果您单步执行代码并检查页面设置,则这些值是否已正确应用。特别是保存过程无法正常工作!您必须做什么,我已经测试过了,您是否需要将任何报告属性更改为另一个值,然后将其设置回原来的值,然后继续关闭并保存.基本上 Access 似乎没有将边距更改识别为已更改报告,因此您的保存确实实际上并没有保存任何东西。通过进行虚拟更改,它会看到东西发生了变化并全部保存。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 2013-09-18
相关资源
最近更新 更多