打印范围用户select的VBA Excel

我希望能够创build一个基本上像这样运行的模块:

  1. 定义4或5个打印范围;
  2. 提示用户一个input框;
  3. 允许用户从该input框中的下拉列表中select他们希望打印的范围;
  4. select范围后,他们击中确定,并提示一个“你确定吗? 框以防止误点击。

我相当遗憾,我真的觉得我一直在写的代码将不会帮助你解决问题。

我已经由用户定义范围(手动select他们希望打印的列)的工作,但这不是我所期待的。

更进一步,是否有可能允许进一步定制打印格式(横向vs纵向和纸张types)?

非常感谢您的帮助,我会尽我所能来回答问题,并提供我上面引用的代码示例(只是一个提示,允许您select列,我需要它是一个定义的范围,按名称, 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 

作为后续:

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

为了给用户提供一个名称列表,你需要一个UserForm类似于这个:

在这里输入图像说明

该表单后面的代码如下所示。 我已经使用打印预览来支持“你确定”的消息,因为它是一个更优雅的用户体验。

 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 

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