我希望创建一个基本上可以这样运行的模块:
我对此感到非常失落,老实说我觉得我写的代码不仅仅是解决问题的帮助。
我已经让用户定义了范围(手动选择他们想要打印的列),但这不是我想要的。
更进一步,是否可以进一步定制打印格式(横向与纵向和纸张类型)?
非常感谢您提前获得的帮助,我会尽力回答问题并提供上面引用的代码示例(只是一个允许您选择列的提示。我需要它是一个定义的范围,按名称,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
作为后续行动:
假设文档有隐藏的部分,如果它们是用户定义范围的一部分(如果它是分组的一部分),它是否能够取消隐藏这些部分。这是否适用于受保护的文档?
答案 0 :(得分:0)
为了向用户显示名称列表,您需要一个类似于此的UserForm:
该表单背后的代码如下所示。我使用了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
如果要取消隐藏隐藏的行/列,则需要确保范围的工作表适当地不受保护。