2016-04-11 4 views
2

Я новичок в кодировании VBA и до сих пор успешно создал лист обзора в книге, которая скрывает/скрывает вкладки на основе ответов пользователей на ответы да/нет ,Автосогласование столбцов на основе критериев ячеек в другом листе

Мне нужно дополнительно уточнить рабочую книгу, чтобы ответы да/нет, представленные на вкладке обзора, приводили к авто сокрытие столбцов на других листах. Используя предыдущий поток на этом сайте я использовал этот код (очевидно изменен для моих собственных клеток рефов) на одной из вкладок:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$B$6" Then 
     Select Case Target.Value 
     Case Is = "Cast" 
      Columns("f").EntireColumn.Hidden = False 
      Columns("d").EntireColumn.Hidden = True 
      Columns("e").EntireColumn.Hidden = True 
     Case Is = "LDF" 
      Columns("f").EntireColumn.Hidden = True 
      Columns("d").EntireColumn.Hidden = False 
      Columns("e").EntireColumn.Hidden = False 
     Case Is = "Select ROV Type" 
      Columns("f").EntireColumn.Hidden = False 
      Columns("d").EntireColumn.Hidden = False 
      Columns("e").EntireColumn.Hidden = False 
     End Select 

В В6, у меня есть формула (= Name), который втягивает через из области видимости вкладка. В то время как вышеприведенный код работает, он делает это только там, где я вручную вводил ячейку, чтобы повторно вытащить данные ... любые подсказки: - переход к исходной вкладке в мой макрос, минуя ссылку на ячейку; и - автоматизация швов колонны?

ответ

0

Проще всего сделать, кажется, чтобы изменить код, как это, где это необходимо:

Sheet2.Columns("f").EntireColumn.Hidden = False 

Sheet2 является лист, где столбцы должны быть скрыты.

+1

Это было здорово, спасибо. Я просто добавил эту строку кода на вкладку исходных областей. Brilliant. – BGr27

0

Если я правильно интерпретировать ваши потребности идти как следует

В «ThisWorkbook» код панели поместите следующий код:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 

    Application.EnableEvents = False 
    With Sheets("scoping sheet") '<== here you set which sheet you want to monitor 
     If .Range("B6") <> .Range("A1") Then '<== check if the "formula" cell changed its previous value, stored in the "echo" cell ("A1") 

      Select Case .Range("B6").Value 
       Case Is = "Cast" 
        .Columns("f").EntireColumn.Hidden = False 
        .Columns("d").EntireColumn.Hidden = True 
        .Columns("e").EntireColumn.Hidden = True 
       Case Is = "LDF" 
        .Columns("f").EntireColumn.Hidden = True 
        .Columns("d").EntireColumn.Hidden = False 
        .Columns("e").EntireColumn.Hidden = False 
       Case Is = "Select ROV Type" 
        .Columns("f").EntireColumn.Hidden = False 
        .Columns("d").EntireColumn.Hidden = False 
        .Columns("e").EntireColumn.Hidden = False 
      End Select 

      .Range("a1") = .Range("b6") '<== update the "echo" cell value for subsequent checking 

     End If 
    End With 
    Application.EnableEvents = True 

End Sub 

Как вы видите, вы должны выбрать «эхо» ячейку в " scoping ", который будет использоваться для хранения предыдущего значения его ячейки« B6 ».

В моем коде я выбрал ячейку «A1» как ячейку «эхо» на листе «обзор», но вы можете выбрать любой адрес, который вам нужен, если это «свободная» ячейка (т. Е. Ваш код и пользователь выиграл) t использовать его для записи) и соответствующим образом изменить код (то есть адрес "A1" в заявлении If .Range("B6") <> .Range("A1") Then).

Смежные вопросы