【问题标题】:Excel macro using Application.CommandBars.ExecuteMso "PrintPreviewAndPrint" with group selection of sheetsExcel 宏使用 Application.CommandBars.ExecuteMso "PrintPreviewAndPrint" 与工作表的组选择
【发布时间】:2021-11-17 15:51:32
【问题描述】:

我正在尝试创建一个选择多个工作表的宏,然后显示显示打印预览的 Excel 打印对话框,从而使用户能够选择他们的打印机、份数等。到目前为止,我有以下内容:

Sub PrintReport()
'
' PrintReport Macro
'
'
    Sheets(Array("Cover page", "Scoresheet")).Select
    Sheets("Cover page").Activate
    Application.CommandBars.ExecuteMso "PrintPreviewAndPrint"
   
End Sub

这是迄今为止我发现的唯一显示正确对话框的代码,但是选择组工作表的两行(由 Record Macro 函数创建)不起作用,即只显示一个工作表印刷。我推断 ExecuteMso 函数可能在初始化期间清除了选择。任何人都可以建议一种方法来获得我想要的东西吗?

【问题讨论】:

  • 我无法重现此行为,但您可以尝试将 Sheets("Cover page").Activate 移到 Sheets(Array("Cover page", "Scoresheet")).Select 之前
  • 谢谢@BigBen - 不幸的是这并没有什么不同。
  • 我也无法重新创建所描述的行为(即您的代码按预期运行并在“正常”打印预览中显示两张纸)。如果第二张纸是空白的(即一张干净的空白纸),我可以创建该行为,但必须假设这里不是这种情况。所有这一切都表明这是一个与版本相关的错误/问题。
  • 谢谢@Spinner。我倾向于同意;最近有一些小的行为变化,我认为是由于更新。我想我会暂时忍受这个,看看另一个更新是否能解决这个问题。

标签: excel vba printing


【解决方案1】:

我不是专家,只是新人,但我发现这段代码贯穿了我在 Plist 中选择的所有工作表(我要打印的工作表列表)将它们放入一个数组中,然后打开准备好的打印预览页面用于打印。

有帮助吗?

Sub Print_sh()

'multiple sheet printing

Dim SHT As Long, RN As Long

Dim SHEETARRAY() As String

 Dim WP As Variant
 Dim I As Long
 
With ActiveSheet.PList

'(Plist is a list of sheets i want printed)

    For SHT = 0 To .ListCount - 1
        If .Selected(SHT) Then
            ReDim Preserve SHEETARRAY(RN)
            SHEETARRAY(RN) = .Column(1, SHT)
            RN = RN + 1
            End If
        Next SHT
    End With

    For Each WP In SHEETARRAY
        Sheets(WP).Activate
        

Sheets(SHEETARRAY()).PrintPreview

祝你好运,我确信某处存在错误,有很多更聪明的人可以帮助我们做得更好。它可以帮助您入门吗?

【讨论】:

  • 谢谢。我无法让所有这些工作 - 我自己显然不是专家 - 但我最终决定使用 .PrintPreview 选项,即使它没有显示我默认使用 Ctrl/P 获得的完整打印预览对话框(它使用似乎是旧版本的版本)。仍然有兴趣了解为什么 ExecuteMSO“PrintPreviewAndPrint”选项会丢失工作表组选择。
猜你喜欢
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 2015-04-18
  • 2013-09-26
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多