Основываясь на предыдущих ответах на этот вопрос, я написал этот код, который не работает:

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 ответ1

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).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .