工作表更改事件 - 隐藏列

时间:2015-09-17 09:21:45

标签: excel vba excel-vba

我很擅长使用VBA,我相信我需要的以下代码会非常简单,但我对Worksheet_Change事件的曝光非常有限。

我希望在单元格更改其值时运行宏。 (有关详细信息,请参阅附图)

我认为正常的宏代码看起来与下面的内容类似,但不确定如何将其合并到工作表更改宏中

import java.time.{Instant, LocalDateTime, ZoneId, ZoneOffset}

val epochSecond = System.currentTimeMillis() / 1000

LocalDateTime.ofInstant(Instant.ofEpochSecond(epochSecond), ZoneId.systemDefault())//method1
LocalDateTime.ofEpochSecond(epochSecond, 0, ZoneOffset.MAX)//method2

enter image description here

2 个答案:

答案 0 :(得分:1)

以下内容更改了Select Case statement的嵌套If语句。这提供了更多的可读性,并且如果需要,应该易于扩展。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("E6")) Is Nothing Then
        On Error GoTo bm_Safe_Exit
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Columns("CG:ES").Hidden = False
        Select Case Range("E6").Value2
            Case 5
                Columns("CG:ES").Hidden = True
            Case 6
                Columns("CT:ES").Hidden = True
            Case 7
                Columns("DG:ES").Hidden = True
            Case 8
                Columns("DT:ES").Hidden = True
            Case 9
                Columns("EG:ES").Hidden = True
        End Select
    End If

bm_Safe_Exit:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

在处理过程中关闭事件和屏幕更新。前者并非绝对必要,但后者应该减少屏幕'闪光'。

Worksheet_Change事件宏通过右键单击工作表名称选项卡并选择查看代码进入工作表代码页。

答案 1 :(得分:0)

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$E$6" Then
       ' your logic here by switching on Target.Value
   End If
End Sub