簡體   English   中英

Excel VBA函數隱藏/取消隱藏行

[英]Excel VBA Function to hide/unhide Rows

我是 VBA/宏的新手。 根據我的情況,我需要一些幫助來確定如何隱藏/取消隱藏行。 這是我的桌子:

見表:在此處輸入圖像描述

我想做的是:

1) 創建一個具有三個參數的函數(或子函數):

  • 標志范圍:標志范圍或 C1:C9
  • 隱藏動作:真/假
  • 標志:這是標志值之一

示例:Hide_Unhide(flagRange, True, "P")

2) 此函數將根據傳遞到參數中的標志隱藏所有行。

任何建議和樣品表示贊賞。

這里有兩個選項。 第二個 sub 會更快,因為它將一次隱藏所有行,而不是隱藏行的許多可能迭代。 要隱藏的行數越大,您會注意到使用Union方法節省的時間越多

Option Explicit

Sub HideMe(FlagRange As Range, Flag As String)

FlagRange.EntireRow.Hidden = False
Dim FlagCell As Range

Application.ScreenUpdating = False
    For Each FlagCell In FlagRange
        FlagCell.EntireRow.Hidden = FlagCell = Flag 'Rows get hidden here
    Next FlagCell
Application.ScreenUpdating = True

End Sub

Option Explicit

Sub HideMeUnion(FlagRange As Range, Flag As String)

FlagRange.EntireRow.Hidden = False
Dim FlagCell As Range, HideMe As Range

For Each FlagCell In FlagRange
    If FlagCell = Flag Then
        If HideMe Is Nothing Then
            Set HideMe = FlagCell
        Else
            Set HideMe = Union(HideMe, FlagCell)
        End If
    End If
Next FlagCell

'rows gettin hidden here all at once
If Not HideMe Is Nothing Then HideMe.EntireRow.Hidden = True

End Sub

試試這個:

Private sub Hide_Unhide(FlagRange as Range, Hide as Boolean, FlagValue as String)
Dim c as Variant
    For Each c in FlagRange
           c.EntireRow.Hidden = False
    Next c
    For Each c in FlagRange
        If c.Value2 = FlagValue Then
           c.EntireRow.Hidden = Hide
        End IF
    Next c
End Sub

您可以使用以下解決方案來隱藏/取消隱藏行:

Function Hide_Unhide(flagRange As Range, hideAction As Boolean, Flag As String)
        For Each Row In flagRange.Rows
            If Row.Cells(3) = Flag Then
                Row.EntireRow.Hidden = hideAction
            End If
        Next Row
End Function

暫無
暫無

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

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