打印范围用户选择的VBA Excel

时间:2013-02-05 16:08:35

标签: excel vba excel-vba printing range

我希望创建一个基本上可以这样运行的模块:

  1. 定义4或5个打印范围;
  2. 提示用户输入框;
  3. 允许用户从该输入框的下拉列表中选择他们希望打印的范围;
  4. 选择范围后,他们点击确定,然后出现“你确定吗?”框以防止错误点击。
  5. 我对此感到非常失落,老实说我觉得我写的代码不仅仅是解决问题的帮助。

    我已经让用户定义了范围(手动选择他们想要打印的列),但这不是我想要的。

    更进一步,是否可以进一步定制打印格式(横向与纵向和纸张类型)?

    非常感谢您提前获得的帮助,我会尽力回答问题并提供上面引用的代码示例(只是一个允许您选择列的提示。我需要它是一个定义的范围,按名称,range1=a2:c14或类似的东西,因为最终用户不是一个优秀的Excel用户。

    见下文:

    Sub SelectPrintArea()
    Dim PrintThis As Range
    ActiveSheet.PageSetup.PrintArea = ""
    Set PrintThis = Application.InputBox _
    (Prompt:="Select the Print Range", Title:="Select", Type:=8)
    PrintThis.Select
    Selection.Name = "NewPrint"
    ActiveSheet.PageSetup.PrintArea = "NewPrint"
    ActiveSheet.PrintPreview
    End Sub
    

    作为后续行动:

    假设文档有隐藏的部分,如果它们是用户定义范围的一部分(如果它是分组的一部分),它是否能够取消隐藏这些部分。这是否适用于受保护的文档?

1 个答案:

答案 0 :(得分:0)

为了向用户显示名称列表,您需要一个类似于此的UserForm:

enter image description here

该表单背后的代码如下所示。我使用了Print预览,转而使用“你确定”的消息,因为它是一个更优雅的用户体验。

Option Explicit

Private Sub UserForm_Initialize()

  With Me.cboPrintAreas
    .MatchRequired = True
    'Add named ranges to the listbox
    .AddItem "Report_1"
    .AddItem "Report_2"
    .AddItem "Report_3"
    .AddItem "Report_4"
    .AddItem "Report_5"

    'Set the default report
    .Value = "Report_1"
  End With

End Sub

Private Sub btnCancel_Click()
  Unload Me
End Sub

Private Sub btnPrint_Click()

    Dim rng As Range

    Set rng = Range(Me.cboPrintAreas.Value)

    With rng.Worksheet
      'Do a crude assignment of paper orientation
      If rng.Height > rng.Width Then
      .PageSetup.Orientation = xlPortrait
      Else
        .PageSetup.Orientation = xlLandscape
      End If
      .PageSetup.PrintArea = rng.Address
      Me.Hide
      .PrintOut Preview:=True, IgnorePrintAreas:=False
      Unload Me
    End With

End Sub

您将从标准模块中显示表单,其代码如下:

Sub test()

  UserForm1.Show

End Sub

如果要取消隐藏隐藏的行/列,则需要确保范围的工作表适当地不受保护。