2013-02-05 57 views
3

我希望创造条件,基本操作,像这样的模块:打印范围用户选择VBA的Excel

  1. 定义4或5打印范围;
  2. 提示用户输入框;
  3. 允许用户从该输入框中的下拉列表中选择他们希望打印的范围;
  4. 选择范围后,他们点击确定,并提示您是否确定?以防止误点击。

我对此很遗憾,我真的觉得我一直在写的代码不会仅仅阐明问题。

我有它的定义范围的用户工作(手动选择想要打印的列),但是这不是我要找的。

一步,这将有可能允许打印格式(风景VS肖像和纸张类型),甚至进一步的定制?

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

为了呈现名用户的列表中,你需要一个类似的用户窗体:

enter image description here

这种形式背后的代码看起来像下面。我已经使用Print预览来支持“Are you sure”信息,因为它是一种更优雅的UX。

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 

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