簡體   English   中英

如何將這些子過程轉換為在兩個工作表上工作?

[英]How do I convert these Sub procedures to work on two worksheets?

我正在使用桌面游戲MERP的字符表的工作簿版本。 它最初是由其他人(大約15年前)編寫的,因此其中大部分沒有針對現代用途進行優化,因此我一直在對其進行全面的改進。 我對這些公式很滿意,並且獲得了基本的編程概念,但是我對Virtual Basic並不熟悉。

作為大修的一部分,由於相關信息發生了顯着變化,因此我將原始頁面分成了打印頁面並計算了每個頁面的版本。 一頁使用宏隱藏未更改值的行,另一頁使用宏顯示所有行。 我正在嘗試修改宏,以便它影響兩個頁面而不是一個頁面,但是我顯然不了解所需的結構。

如何修改此設置,使其在“技能”表和“打印技能”表上執行相同的功能? 如果需要,我可以在“打印技能”上添加參考列,但我希望它與“技能”上的內容完全匹配,而無需再次檢查。 兩張紙上的相關數據相同。

這是原始代碼:

' 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個不同的圖紙調用Subs:

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

    ShowSkills ThisWorkbook.Worksheets("Skills")
    ShowSkills ThisWorkbook.Worksheets("Print Skills")
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM