В настоящее время я работаю над проектом, который требует хорошего понимания 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
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
Вероятно, есть несколько способов решить вашу проблему. При взаимодействии с более чем одной строкой или столбцом вам необходимо использовать свойство 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
Похожие вопросы
Новые вопросы
excel
Только для вопросов по программированию для объектов или файлов Excel или для разработки сложных формул. Вы можете объединить тег Excel с VBA, VSTO, C #, VB.NET, PowerShell, OLE-автоматизацией и другими тегами и вопросами, связанными с программированием, если это применимо. Общая помощь по MS Excel для функций одного листа доступна в Super User.