如何将这些Sub过程转换为在两个工作表上工作?

我正在使用桌面游戏MERP的angular色表的工作簿版本。 它最初是由大约十五年前(别人)编写的,其中很多都没有为现代使用而优化,而且我正在进行翻修。 我对这个公式很好,而且我得到了一些基本的编程概念,但是我并不熟悉Virtual Basic。

作为检修的一部分,我已经把原来的页面分成了打印和计算版本,因为相关的信息发生了很大的变化。 一个页面使用macros来隐藏未更改值的行,另一个页面显示所有行。 我试图修改macros,以便它影响两个页面,而不是一个,但我显然不理解所需的结构。

我该如何修改它,使其在“技能”表和“打印技能”表上执行相同的function? 如果需要的话,我可以在“打印技能”中join参考专栏,但是我更希望它与“技能”上所做的匹配,而不需要再次检查。 两张纸上的相关数据是相同的。

这是原始代码:

' HideSkills Macro ' This macro hides any line on the Skills sheet that doesn't ' have a 1 in the Display column. Sub HideSkills() SkillsHidden = True Sheets("Skills").Select ActiveSheet.Unprotect Computation_Off For Each rw In Range("SkillsList").Rows If ActiveSheet.Cells(rw.Row, 21) = 0 Then Rows(rw.Row).Select Selection.EntireRow.Hidden = True End If Next rw ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Computation_On End Sub ' ShowSkills Macro ' This macro shows all lines on the Skills sheet. Sub ShowSkills() SkillsHidden = False Sheets("Skills").Select ActiveSheet.Unprotect Range("SkillsList").Rows.Select Selection.EntireRow.Hidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveSheet.Cells(4, 2).Select End Sub 

这是优化方法的一种方法,并允许它们在多张纸上工作

 Option Explicit ' This Sub hides any line on the sheet that doesn't have a 1 in the Display column. Public Sub HideSkills(ByRef ws As Worksheet, Optional ByVal colID As Long = 21) SkillsHidden = True Computation_Off With ws .Unprotect If .UsedRange.Rows.Count > 1 Then .UsedRange.AutoFilter Field:=colID, Criteria1:="1" .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End With Computation_On End Sub ' This Sub shows all lines on the sheet Public Sub ShowSkills(ByRef ws As Worksheet) SkillsHidden = False With ws .Unprotect .UsedRange.EntireRow.Hidden = False If Not .AutoFilter Is Nothing Then .UsedRange.AutoFilter .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True .Activate .Cells(4, 2).Activate End With End Sub 

给2个不同的床单打电话:

 Public Sub testSheets() HideSkills ThisWorkbook.Worksheets("Skills"), 21 HideSkills ThisWorkbook.Worksheets("Print Skills") ShowSkills ThisWorkbook.Worksheets("Skills") ShowSkills ThisWorkbook.Worksheets("Print Skills") End Sub