В настоящее время я работаю над проектом, который требует хорошего понимания Excel. Для этого проекта мне нужно разработать шаблон Excel, и я сейчас над этим работаю.

У меня есть некоторые знания о том, как использовать Excel, но он не содержит кодирования в Excel с использованием VBA.

Я нашел в Интернете код, который не полностью помогает мне с моей проблемой. Моя проблема в том, что я хочу скрыть некоторые столбцы на основе результата функции в одной ячейке. Как вы можете видеть ниже, я уже создал некоторый код, но, попробовав все, мне все еще не удалось скрыть несколько столбцов. Я нашел в Интернете несколько решений для выбора нескольких столбцов, но, к сожалению, мне не удалось использовать его в своем коде. Пожалуйста, дайте мне знать, если у вас есть решения моей проблемы. Заранее спасибо за вашу помощь.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("B5").Value = "USD" Then
        Columns("C").EntireColumn.Hidden = True
    ElseIf Range("B5").Value = "LC" Then
        Columns("C").EntireColumn.Hidden = False
    End If
End Sub
1
AsZ 13 Мар 2018 в 17:55

2 ответа

Лучший ответ

Ниже приведен код, который помог мне решить мою проблему. Спасибо пользователям Pᴇʜ и sous2817. Надеюсь, что это может помочь кому-то другому.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("B5").Value = "USD" Then
        Union(Columns("C"), Columns("E")).EntireColumn.Hidden = True
    ElseIf Range("B5").Value = "LC" Then
        Union(Columns("C"), Columns("E")).EntireColumn.Hidden = False
    End If
End Sub
0
AsZ 14 Мар 2018 в 10:58

Вероятно, есть несколько способов решить вашу проблему. При взаимодействии с более чем одной строкой или столбцом вам необходимо использовать свойство Range. Вот один способ (при условии непрерывного диапазона):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("B5").Value = "USD" Then
        Range("C:D").EntireColumn.Hidden = True
    ElseIf Range("B5").Value = "LC" Then
        Range("C:D").EntireColumn.Hidden = False
    End If
End Sub

Кроме того, как указывает Pᴇʜ в комментариях, может быть лучше использовать событие Change, поскольку вас действительно волнует только то, если / когда B5 изменится. Событие SelectionChange, вероятно, срабатывает чаще, чем вам нужно (опять же, ожидает настройки вашего листа). Вот тот же код с другим событием:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$5" Then
        If Target.Value = "USD" Then
            Range("C:D").EntireColumn.Hidden = True
        ElseIf Target.Value = "LC" Then
            Range("C:D").EntireColumn.Hidden = False
        End If
    End If       
End Sub

Чтобы завершить общий вопрос, вот способ выполнить ту же задачу с несмежными диапазонами:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$5" Then
        If Target.Value = "USD" Then
            Union(Columns("C"), Columns("G")).EntireColumn.Hidden = True
        ElseIf Target.Value = "LC" Then
            Union(Columns("C"), Columns("G")).EntireColumn.Hidden = False
        End If
    End If
End Sub
1
sous2817 13 Мар 2018 в 15:41