根据行中的值自动隐藏/取消隐藏列,该值是从另一个工作表转换而来的公式

时间:2019-07-06 09:46:57

标签: excel vba

Gday全部

我面临一个需要您全力帮助的问题。请耐心等待,因为我是VBA编码的新手,正在研究它。

我遇到了一个复杂的问题,得到了部分帮助,但是借助我的帮助,我发现了更多问题。

在单个工作表Accounts List中,B2:B45中的值由数据验证列表单独确定,选项为yes或no。答案为是或否自动转换为第二电子表格,位于Quarter 1处的B4:AS4。请注意,这是通过公式=transpose()而不是VBA进行转置的。

我需要宏来识别B4:AS4Quarter 1中的所有更新,并隐藏“不是”范围内的任何/所有列。

我正在使用的当前代码是:



Private Sub Worksheet_Calculate()

Application.ScreenUpdating = False
    For Each cell In Range("B4:AS4")   
        Select Case cell.Value <> "Yes"
            Case False
                cell.EntireColumn.Hidden = False
            Case True
                cell.EntireColumn.Hidden = True
        End Select
    Next cell
Application.ScreenUpdating = True

    End Sub

该代码确实起作用,并且达到了我需要的结果,但是,这使电子表格非常缓慢,因为每次我在电子表格Quarter 1中输入数据或进行任何更改时,电子表格都会加载。我需要此代码既要瞬时又要不滞后,因为大量的源数据将手动输入。

我们非常感谢您提前提供的帮助!

更新: 由于困难,我很高兴单击Accounts list上的“宏”按钮以刷新Quarter 1,如有必要,请半降低动态功能,但我很乐意牺牲。

1 个答案:

答案 0 :(得分:0)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("B4:AS4")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    For Each cell in Target.Cells
        With cell
            If .Value <> "Yes" Then
                .EntireColumn.Hidden = True
            Else
                .EntireColumn.Hidden = False
            End If
        End With
    Next cell
    Application.EnableEvents = True
End Sub