Excel 按逻辑顺序取消隐藏行

Excel 按逻辑顺序取消隐藏行,excel,vba,Excel,Vba,我有在Excel工作表中隐藏和取消隐藏行的代码。在user1302114()的帮助下,代码被缩短了,现在它的运行速度更快了 目前的问题是: 运行两次NewUnhideJobs(第二部分的位置) 运行一次HideAllJobs 运行NewUnhideJobs 因此,我们有第三节的位置,而不是第一节的位置。因此,NewUnhideJobs不会从0开始,而是继续执行前面的过程 尝试将静态计数器作为字节删除,但没有它,代码无法运行 counter=0也在hidealjobs中进行了尝试,但未成功 隐藏行

我有在Excel工作表中隐藏和取消隐藏行的代码。在user1302114()的帮助下,代码被缩短了,现在它的运行速度更快了

目前的问题是:

  • 运行两次
    NewUnhideJobs
    (第二部分的位置)
  • 运行一次
    HideAllJobs
  • 运行
    NewUnhideJobs
  • 因此,我们有第三节的位置,而不是第一节的位置。因此,
    NewUnhideJobs
    不会从0开始,而是继续执行前面的过程

    尝试将
    静态计数器作为字节删除,但没有它,代码无法运行

    counter=0
    也在
    hidealjobs
    中进行了尝试,但未成功

    隐藏行:

    Sub NewUnhideJobs()
    Static counter As Byte
        Dim RngTxt As String, RngAR() As String, ThisRng As String
    
        counter = (counter + 1) Mod 26
    
        ThisRng = "" & (174 - (counter * 5)) & ":" & (174 - (counter * 5) + 4)
    
        Application.ScreenUpdating = False
        ThisWorkbook.Sheets("Filling form").Unprotect
        ThisWorkbook.Sheets("Filling form").Rows(ThisRng).EntireRow.Hidden = False
        ThisWorkbook.Sheets("Filling form").Protect
        Application.ScreenUpdating = True
    End Sub
    
    Sub HideAllJobs()
       Static counter As Byte
       Application.ScreenUpdating = False
       ThisWorkbook.Sheets("Filling form").Unprotect
       Rows("49:173").EntireRow.Hidden = True
       counter = 0
       ThisWorkbook.Sheets("Filling form").Protect
       Application.ScreenUpdating = True
    End Sub
    
    取消隐藏行:

    Sub NewUnhideJobs()
    Static counter As Byte
        Dim RngTxt As String, RngAR() As String, ThisRng As String
    
        counter = (counter + 1) Mod 26
    
        ThisRng = "" & (174 - (counter * 5)) & ":" & (174 - (counter * 5) + 4)
    
        Application.ScreenUpdating = False
        ThisWorkbook.Sheets("Filling form").Unprotect
        ThisWorkbook.Sheets("Filling form").Rows(ThisRng).EntireRow.Hidden = False
        ThisWorkbook.Sheets("Filling form").Protect
        Application.ScreenUpdating = True
    End Sub
    
    Sub HideAllJobs()
       Static counter As Byte
       Application.ScreenUpdating = False
       ThisWorkbook.Sheets("Filling form").Unprotect
       Rows("49:173").EntireRow.Hidden = True
       counter = 0
       ThisWorkbook.Sheets("Filling form").Protect
       Application.ScreenUpdating = True
    End Sub
    

    必须将计数器声明为全局变量

    Public counter As Long 'public variable
    
    Sub NewUnhideJobs()
        Dim RngTxt As String, RngAR() As String, ThisRng As String
    
        counter = (counter + 1) Mod 26
    
        ThisRng = "" & (174 - (counter * 5)) & ":" & (174 - (counter * 5) + 4)
    
        Application.ScreenUpdating = False
        ThisWorkbook.Sheets("Filling form").Unprotect
        ThisWorkbook.Sheets("Filling form").Rows(ThisRng).EntireRow.Hidden = False
        ThisWorkbook.Sheets("Filling form").Protect
        Application.ScreenUpdating = True
    End Sub
    
    
    Sub HideAllJobs()
       Application.ScreenUpdating = False
       ThisWorkbook.Sheets("Filling form").Unprotect
       Rows("49:173").EntireRow.Hidden = True
       counter = 0
       ThisWorkbook.Sheets("Filling form").Protect
       Application.ScreenUpdating = True
    End Sub
    

    否则,您的
    计数器=0
    NewUnhideJobs
    中的计数器没有任何影响,因为您已声明了两个不同的
    计数器
    变量,每个过程/子过程一个。

    您必须将计数器声明为全局变量

    Public counter As Long 'public variable
    
    Sub NewUnhideJobs()
        Dim RngTxt As String, RngAR() As String, ThisRng As String
    
        counter = (counter + 1) Mod 26
    
        ThisRng = "" & (174 - (counter * 5)) & ":" & (174 - (counter * 5) + 4)
    
        Application.ScreenUpdating = False
        ThisWorkbook.Sheets("Filling form").Unprotect
        ThisWorkbook.Sheets("Filling form").Rows(ThisRng).EntireRow.Hidden = False
        ThisWorkbook.Sheets("Filling form").Protect
        Application.ScreenUpdating = True
    End Sub
    
    
    Sub HideAllJobs()
       Application.ScreenUpdating = False
       ThisWorkbook.Sheets("Filling form").Unprotect
       Rows("49:173").EntireRow.Hidden = True
       counter = 0
       ThisWorkbook.Sheets("Filling form").Protect
       Application.ScreenUpdating = True
    End Sub
    

    否则,您的
    计数器=0
    不会对
    NewUnhideJobs
    中的计数器产生任何影响,因为您已声明了两个不同的
    计数器
    变量,每个过程/子过程一个。

    也张贴在此处:只要在模块顶部的所有子过程之外
    尝试声明
    公共计数器。并将subs中的
    静态计数器作为Byte
    移除。否则,
    counter=0
    将不会对
    NewUnhideJobs
    @P中的计数器产生任何影响ᴇʜ现在似乎起作用了!谢谢师父!我想你可以添加你的评论作为答案!完成后,您可以将其标记为已解决。也张贴在此处:尝试声明
    公共计数器,只要它位于模块顶部的所有子计数器之外。并将subs中的
    静态计数器作为Byte
    移除。否则,
    counter=0
    将不会对
    NewUnhideJobs
    @P中的计数器产生任何影响ᴇʜ现在似乎起作用了!谢谢师父!我想你可以添加你的评论作为答案!完成后,可以将其标记为已解决。