打印范围用户select的VBA Excel
我希望能够创build一个基本上像这样运行的模块:
- 定义4或5个打印范围;
- 提示用户一个input框;
- 允许用户从该input框中的下拉列表中select他们希望打印的范围;
- 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
如果你想取消隐藏隐藏的行/列,你需要确保你的范围的表适当不受保护。