如何在打印页面之前设置打印macros以运行其他两个macros

我是使用macros的新手,但遇到了让我难以接受的情况。 我有一个包含3个工作表(“检查报告”,“设备列表”和“缺陷”)的工作簿。 我在“设备列表”和“隐藏空白行”的“缺陷”上有一个macros。 我想在“检查报告”上创build一个macros来操作macros,在打印所有3页之前隐藏空行。

这是我的代码。 前两个Sub分别在各自的工作表上,最后一个在一个模块中。

Sub Hide_Blank_Rows2() 'Hide blank rows on "Device List" ActiveSheet.Unprotect Password:="" Application.ScreenUpdating = 0 On Error Resume Next [b12:b1108].SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True Application.ScreenUpdating = 1 ActiveSheet.Protect Password:="" End Sub 

 Sub Hide_Blank_Rows3() 'Hide blank rows on "Deficiencies" ActiveSheet.Unprotect Password:="" Application.ScreenUpdating = 0 On Error Resume Next [b49:b156].SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True Application.ScreenUpdating = 1 ActiveSheet.Protect Password:="" End Sub 

 Sub Print_All_Pages() ' ' Run Macros to hide blank rows then print all three worksheets ' Call Hide_Blank_Rows2 Call Hide_Blank_Rows3 ' Sheets(Array("Inspection Report", "Device List", "Deficiencies")).Select Sheets("Inspection Report").Activate ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False End Sub 

当我运行这个时,我得到一个编译错误:子或函数没有定义。

由于您的“隐藏”子是在工作表而不是在一个模块,他们是他们各自的工作表的方法。 你需要指定在ie上调用该方法的对象(使用Sheet2和Sheet3作为示例):

 Sheet2.Hide_Blank_Rows2 Sheet3.Hide_Blank_Rows3 

您可以省略Call关键字。

您也可以将“隐藏”子模块移动到模块中。 如果它们留在工作表上,将ActiveSheet的引用replace为Me将解决您尚未得到的错误(在调用2个Subs或它们之间不要更改ActiveSheet):

 Sub Hide_Blank_Rows2() 'Hide blank rows on "Device List" Me.Unprotect Password:="" Application.ScreenUpdating = 0 On Error Resume Next [b12:b1108].SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True Application.ScreenUpdating = 1 Me.Protect Password:="" End Sub 

如果你把它们移动到一个模块中,你需要特别指定一个工作表来操作,以便解决你还没有做到的错误。 我个人只是把它们合并成一个Sub这样的东西…

 Sub Hide_Blank_Rows(sh As Worksheet, targetRange As String) sh.Unprotect Password:="" Application.ScreenUpdating = 0 On Error Resume Next sh.Range(targetRange).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True Application.ScreenUpdating = 1 sh.Protect Password:="" End Sub 

…并将其放在Sub Print_All_Pages()的相同位置。

你会这样称呼它:

 Hide_Blank_Rows Sheets("Device List"), "B12:B1108" Hide_Blank_Rows Sheets("Deficiencies"), "B49:B156"