我是使用Macros的新手,但我遇到了让我难过的情况。我有一个包含3个工作表的工作簿(“检查报告”,“设备列表”和“缺陷”)。我在“设备列表”上有一个宏,在“缺陷”上有一个隐藏空白行的宏。我想在“检查报告”上创建一个宏,它将操作宏以在打印所有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
当我运行这个时,我得到一个编译错误:Sub或Function not defined。
答案 0 :(得分:1)
由于“隐藏”Subs
位于工作表而不是模块中,因此它们是各自工作表的方法。您需要指定调用该方法的对象,即(使用Sheet2和Sheet3作为示例):
Sheet2.Hide_Blank_Rows2
Sheet3.Hide_Blank_Rows3
您可以省略Call
关键字。
您也可以将“隐藏”子项移动到模块。如果您将保留在工作表上,将ActiveSheet
的引用替换为Me
将解决您尚未遇到的错误(在调用之前,您永远不会更改ActiveSheet 2 Subs
或它们之间):
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"