代码之家  ›  专栏  ›  技术社区  ›  AntonioN

VBA隐藏不同的列

  •  0
  • AntonioN  · 技术社区  · 3 年前

    我试图隐藏不相邻的不同列。

    我有下面的代码,但这只允许我隐藏一个范围,例如在本例中的列 H:K .如果我想隐藏其他列,请说我想隐藏 H:K 而且 S:T , X:Y 和专栏 Z:Z -如何使下面的代码适用于非相邻列?

    Option Explicit
    
    '---------->>
    Public Sub ToggleColumns()
        Dim SH As Worksheet
        Dim Rng As Range
        Dim obj As Variant
        Dim BTN As Button
        Dim iLen As Long
        Const myColumns As String = "H:K"               '<<===== Change
        Const sFees As String = "Fees"                       '<<===== Change
        Const sHidden As String = " Hidden"
        Const sVisible As String = " Visible"
    
        Set SH = ActiveSheet
        Set BTN = SH.Buttons(Application.Caller)
        Set Rng = SH.Columns(myColumns)
        With Rng.EntireColumn
            .Hidden = Not .Hidden
            If .Hidden Then
            iLen = Len(sHidden) + Len(sFees)
                BTN.Characters.Text = sFees & " Hidden"
                With BTN.Characters(Start:=1, Length:=iLen).Font
                    .Name = "Arial"
                    .FontStyle = "Bold"
                    .Size = 10
                    .ColorIndex = 3  '\\ RED
                End With
            Else
            iLen = Len(sVisible) + Len(sFees)
            BTN.Characters.Text = sFees & " Visible"
                With BTN.Characters(Start:=1, Length:=iLen).Font
                    .Name = "Arial"
                    .FontStyle = "Bold"
                    .Size = 10
                    .ColorIndex = 4  '\\ GREEN
                End With
            End If
        End With
    
    End Sub
    
    0 回复  |  直到 3 年前
        1
  •  1
  •   Pᴇʜ    3 年前

    代替

    Const myColumns As String = "H:K"    
    

    具有

    Const myColumns As String = "H:K,S:T,X:Y,Z:Z"
    

    Set Rng = SH.Columns(myColumns)
    

    具有

    Set Rng = SH.Range(myColumns)
    

    因为 Columns() 不支持列不连续的地址。