Создайте макрос, который будет скрывать и показывать столбцы на основе выбора из выпадающего списка - PullRequest
0 голосов
/ 06 июля 2010

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

Вот примерно так я бы это выглядел -

Sub HideColumns()
    If cell(ViewType).Value = "Option 1" Then
       Cells(Column_1, Column_2).EntireColumn.Hidden = True
    ElseIf cell(ViewType).Value = "Option 2" Then
       Cells(Column_2, Column_3).EntireColumn.Hidden = True
    ElseIf cell(ViewType).Value = "Option 3" Then
       Cells(Column_3, Column_4).EntireColumn.Hidden = True
    End If
End Sub 

Я назвал ячейку с раскрывающимся списком ViewType в Excel - будет ли VBA распознавать объект таким образом, или мне нужно объявить его?

Как определить столбцы, которые я хочу скрыть?

Ответы [ 2 ]

1 голос
/ 17 августа 2012

Мне нравится использовать пользовательские представления при скрытии и скрытии столбцов. Пользовательские виды находятся на вкладке «Вид» (> = 2007) и в меню «Вид» (<= 2003). Вот пример: </p>

  1. Скрыть столбцы 1 и 2
  2. Вид - Пользовательские виды - Добавить - назовите его "Option1"
  3. Показать, затем скрыть столбцы 2 и 3
  4. Вид - Пользовательские виды - Добавить - назовите его "Option2"
  5. Показать, затем скрыть столбцы 3 и 4
  6. Вид - Пользовательские виды - Добавить - назовите его "Option3"
  7. Unhide
  8. Создайте проверку данных в ячейке (которая не будет скрыта) и создайте список с «Option1, Option2, Option3»
  9. Назовите эту ячейку ViewType
  10. Щелкните правой кнопкой мыши вкладку листа и выберите «Просмотреть код» и поместите приведенный ниже код в эту область кода

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        'Only work on the cell named ViewType
        'The Me keyword refers to the sheet whose code module you're in
        If Target.Address = Me.Range("ViewType").Address Then
            'Show the custom view that corresponds to the value selected
            'in the dropdown
            ActiveWorkbook.CustomViews(Target.Value).Show
        End If
    
    End Sub
    

Когда пользователь выбирает Option1 из выпадающего списка, отображается представление Option1, в котором скрываются столбцы 1 и 2. Это хороший способ управлять скрытием и отображением, поскольку вы можете просто настроить пользовательское представление, если вы когда-либо захотите его изменить, вместо редактирования кода.

1 голос
/ 06 июля 2010

Имена, которые вы определяете в Excel, доступны в Excel как обычные переменные, поэтому это не должно быть проблемой.

В вашем случае, однако, я бы предложил использовать оператор Switch Case.Это выглядело бы следующим образом:

Select Case ActiveWorkbook.Names("ViewType").RefersToRange
         Case "Option 1" 
              ' Hide Column X
         Case "Option 2" 
              ' Hide Column Y
End Select

Также имейте в виду, что для вызова макроса после изменения ячейки вам потребуется поместить этот код в

Private Sub Worksheet_Change(ByVal Target As Range)
End Sub

ThisПодпрограмма должна быть размещена в кодовой части самого листа и будет выполняться каждый раз при изменении ячейки в листе.

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

...