使用 VBA 跨选项卡隐藏活动单元格列

问题描述 投票:0回答:2

我正在尝试隐藏前 4 个选项卡中的活动单元格列。

我选择突出显示前 4 个选项卡并选择单元格 A1,然后使用以下代码:

ActiveCell.EntireColumn.Hidden = True

这会隐藏第一个选项卡中的 A 列,但不会隐藏选项卡 2、3、4。

它必须是选定的单元格,而不是

Range("A1").EntireColumn.Hidden = True
,因为该单元格可以是我试图使用偏移函数隐藏的任何活动单元格。

excel vba tabs hide
2个回答
1
投票

您可以存储活动单元格的位置,然后循环浏览每个工作表并使用该位置作为列隐藏的基础..

Sub tested()

    Dim cell_address As String
    Dim wsName, ws, c As Range
    
    cell_address = ActiveCell.Address
    
    wsName = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")
    
    For Each ws In wsName
        Sheets(ws).Range(cell_address).EntireColumn.Hidden = True
    Next

End Sub

0
投票

隐藏不同工作表中的同一列

  • 无法同时组合(选择)多个工作表中的单元格,因此您需要循环遍历工作表并逐一隐藏每一列。

用法

Sub HideCellColumnsTEST()
    
    Dim wsIDs(): wsIDs = Array(1, 2, 3, 4)
 
    Dim ws As Worksheet: Set ws = ActiveSheet
    
    Dim cell As Range: Set cell = ws.Range("A1")
    'or:
    'Set cell = ActiveCell
    'Set cell = ActiveCell.Offset(, 3) '...etc.

    HideCellColumns cell, wsIDs

End Sub

方法

Sub HideCellColumns(ByVal cell As Range, ByVal wsIDs As Variant)
    
    Dim CellAddress As String: CellAddress = cell.Address
    Dim wb As Workbook: Set wb = cell.Worksheet.Parent

    Dim ws As Worksheet, wsID
    
    For Each wsID In wsIDs
        On Error Resume Next
            Set ws = wb.Worksheets(wsID)
        On Error GoTo 0
        If Not ws Is Nothing Then ' worksheet exists
            ws.Range(CellAddress).EntireColumn.Hidden = True
            Set ws = Nothing ' reset for the next iteration
        'Else ' worksheet doesn't exist; do nothing!?
        End If
    Next wsID

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.