Excel 中的自动隐藏区域

Excel 中的自动隐藏区域

根据先前对这个问题的回答,我编写了这段不起作用的代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("'Paramètres clés du projet'!$H$25").Value = "1" Then
        Columns("'Feuille de calcul'!L:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "2" Then
        Columns("'Feuille de calcul'!M:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "3" Then
        Columns("'Feuille de calcul'!N:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "4" Then
        Columns("'Feuille de calcul'!O:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "5" Then
        Columns("'Feuille de calcul'!P:AD").EntireColumn.Hidden = True
        ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "6" Then
        Columns("'Feuille de calcul'!Q:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "7" Then
        Columns("'Feuille de calcul'!R:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "8" Then
        Columns("'Feuille de calcul'!S:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "9" Then
        Columns("'Feuille de calcul'!T:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "10" Then
        Columns("'Feuille de calcul'!U:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "11" Then
        Columns("'Feuille de calcul'!V:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "12" Then
        Columns("'Feuille de calcul'!W:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "13" Then
        Columns("'Feuille de calcul'!X:AD").EntireColumn.Hidden = True
        ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "14" Then
        Columns("'Feuille de calcul'!Y:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "15" Then
        Columns("'Feuille de calcul'!Z:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "16" Then
        Columns("'Feuille de calcul'!AA:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "17" Then
        Columns("'Feuille de calcul'!AB:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "18" Then
        Columns("'Feuille de calcul'!AC:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "19" Then
        Columns("'Feuille de calcul'!AD:AD").EntireColumn.Hidden = True
  ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "20" Then
        Columns("'Feuille de calcul'!AD:AD").EntireColumn.Hidden = False

    End If
End Sub

--> 我想要从此代码中获得的功能是根据另一张表中某个单元格的值(从 0 到 20 的下拉菜单)自动隐藏另一张表中的某个区域。

有人可以解释一下为什么我的代码不起作用吗?

谢谢

答案1

像那样将目标表放入其中Columns()是无效的。
请尝试使用 Worksheets("Feuille de calcul").Columns("L:AD").EntireColumn.Hidden = True

您也可以尝试一些更短、更动态的方法。您可以执行以下操作,而不是定义列表中的每个值:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim cMin As Integer, cMax As Integer, cSave As Integer, i As Integer, ws As String
ws = "Feuille de calcul"                'Sheet to hide on.
cMin = 12                               'First column to hide on "1".   12 = "L"
cMax = 30                               'Last column to hide.           30 = "AD"

If Target.Address = "$H$25" Then        'Only updates the Hidden columns in `ws´ when the list is changed
    If Target.Value >= 1 And Target.Value <= 20 Then  'Only updates if list is between 1 and 20
        cSave = cMin
        Do                              'Loops through and unhides all columns between cMin and cMax
            Worksheets(ws).Columns(cMin).EntireColumn.Hidden = False
            cMin = cMin + 1
        Loop While cMin <= cMax
        cMin = cSave
        i = Target.Value
        cMin = cMin + i - 1
        If cMin > cMax Then             'If "20" is chosen from the default list, we have gone past cMax
            cMin = cMax                 'So we set it to the last column
        End If
        Do                              'Loops through and hides all columns between cMin and cMax
            Worksheets(ws).Columns(cMin).EntireColumn.Hidden = True
            cMin = cMin + 1
        Loop While cMin <= cMax
    End If
End If
End Sub

如您所见,我没有包含对列表所在工作表的引用。
这是因为此代码应该放在特定工作表的代码中
现在您可以更改起始和结束列,而不必重写整个内容。
编辑为首先取消隐藏在列范围 (cMin 到 cMax) 中指定的所有列。

相关内容