2016-08-24 6 views
0

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

enter image description here

Основе от того, или не выбирает пользователь «Дни» или «Часы» из коробки в С3, я хотел бы для строк с 6 по 8, которые будут скрыты. Аналогично, если пользователь выбирает «Часы», строки с 9 по 11 должны быть скрыты. Это то, что я написал до сих пор:

Sub ConditionalDisplay() 
    BeginRow = 1 
    EndRow = 50 

    For RowCnt = BeginRow to EndRow 

    IF Cells(RowCnt, CheckColumn).Value = "Days" THEN 
     Rows("6:8").EntireRow.Hidden = TRUE 
    ELSE 
     Rows("6:8").EntireRow.Hidden = FALSE 
    END IF 

    Next RowCnt 
    End Sub 

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

Любые предложения?

+0

Вы никогда не объявляли 'CheckColumn' - что это будет? Также обратите внимание на событие 'Workbook_Open()', если вы хотите скрыть определенные ячейки при открытии. – BruceWayne

+0

'рабочие листы (« Калькулятор »). Строки (« 6: 8 »). Скрытые = рабочие листы (« Калькулятор »). Диапазон (« C3 ») =« Дни »и« Листы »(« Калькулятор »). Строки (" 9:11 »). Скрытые = рабочие листы (« Калькулятор »). Диапазон (« C3 ») =« Часы »' –

+0

@BruceWayne извините за это ... CheckColumn = 3 –

ответ

3

Поместите этот код в модуль, прикрепленного к книге

Sub ConditionalDisplay() 
    With Worksheets("Calculator") 
     IF .Range("C3") <> "Days" And .Range("C3") <> "Hours" Then 
      .Rows("6:11").Hidden = True 
     Else 
      .Rows("6:8").Hidden = .Range("C3") = "Days" 
      .Rows("9:11").Hidden = .Range("C3") = "Hours" 
     End If 
    End With 
End Sub 

Затем в коде рабочего листа для Calculator поместить этот код события:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Not Intersect(Target, Range("C3")) Is Nothing Then 
    ConditionalDisplay 
End If 
End Sub 

Тогда в ThisWorkbook кодекс поставил это событие:

Private Sub Workbook_Open() 
Worksheets("Calculator").Range("C3") = "" 
ConditionalDisplay 
End Sub 
+0

Могли бы вы немного рассказать о том, что функция для каждого из этих разделов вы упомянули? Первый и последний имеют смысл, но я не уверен, что следую тому, что происходит в коде для листа «Калькулятор». –

+0

Второе срабатывает при каждом изменении ячейки C3 на листе «Калькулятор». Поэтому, если бы кто-то изменил C3 с «Days» на «Hours», код запустил бы и отобразил строки 6: 8 и спрятал строки 9:11. Это событие рабочего листа и когда какая-либо ячейка на этом листе меняет его. Он проверяет, изменилась ли ячейка C3, если она не игнорирует остальную часть кода, но если это так, то она вызывает 'ConditionalDisplay' –

+0

Интересно. Что такое аргумент «Если не пересекаться»? Я никогда раньше этого не видел. Я действительно не слишком много играю в VBA, но мне бы очень хотелось. Это очень мощно, если вы это знаете. –

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