2016-05-06 2 views
1

Моя электронная таблица выставляется с повторяющимися строками для ручной проверки данных. Столбец «I» содержит выпадающее меню с помощью функции «Проверка данных» с тремя параметрами. Я пытаюсь сохранить дополнительную колонку «K» скрытой, если только (редкий) случай, когда опция «N/A» выбрана из раскрывающегося списка.Попытка отобразить дополнительную колонку, если какая-либо ячейка в диапазоне соответствует критериям

Private Sub Worksheet_Change(ByVal Target As Range) 
     If Columns("K").EntireColumn.Hidden = True Then 
      If Target.Value = "N/A" Then 
      Act3 
      Else 
      Act4 
     End If 
     Else 
     Act4 
     End If 
    End Sub 

Sub Act3() 
    Columns("K").EntireColumn.Hidden = False 
End Sub 

Sub Act4() 
    Columns("K").EntireColumn.Hidden = True 
End Sub 

Мой код может быть немного грубым, но он по крайней мере отображает столбец при выборе правильных критериев. Моя проблема в том, что если другой ячейке присваивается выбор, который не требует дополнительного столбца, он снова скрывает столбец. Что мне не хватает? Есть функция, которая позволяет что-то вдоль линий:

«Если какой-либо в диапазоне Then»

+1

Вы со ссылкой на текст константы 'N/Ā' или ошибки листа' # N/Ā' ? Какой диапазон ячеек должен изменить видимость столбца? Что-нибудь в столбце I или конкретной ячейке в столбце I? – Jeeped

+0

Возможно, вы захотите попробовать 'If IsError (target) Then' вместо того, что у вас есть. Или попробуйте 'If Target.Value =" # N/A "Then' ... – BruceWayne

+0

" N/A "- это фактический выбор в раскрывающемся списке Data Validation. K4: K54 - это клетки, которым дается падение. Весь столбец я должен стать видимым. @Jeeped – fobnicat

ответ

0

Попробуйте добавить свою функцию AnyNA. Он проходит через всю вашу колонку, чтобы проверить наличие N/A и не скрывать, когда они найдены.

Кажется, вы только хотите рассмотреть скрытие, если оно не скрыто и наоборот, поэтому я оптимизировал для вас. Кроме того, для ясности удалены избыточные «= True» и изменены подзаголовки на «Скрыть» и «Показать».

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Columns("K").EntireColumn.Hidden And Target.Value = "N/A" Then 
     Unhide 
    ElseIf Not Columns("K").EntireColumn.Hidden And Not AnyNA Then 
     Hide 
    End If 
End Sub 

Private Function AnyNA() As Boolean 
    For Row = 1 To Range("J" & Rows.Count).End(xlUp).Row 
     If Range("J" & Row).Value = "N/A" Then 
      AnyNA = True 
      Exit Function 
     End If 
    Next 
    AnyNA = False 
End Function 

Sub Unhide() 
    Columns("K").EntireColumn.Hidden = False 
End Sub 

Sub Hide() 
    Columns("K").EntireColumn.Hidden = True 
End Sub 
+0

Я могу следовать логике здесь, но у меня возникают проблемы с синтаксисом. Я новичок в VBA, поэтому это может быть просто. Я получаю синтаксические ошибки в 'Unhide()' 'Hide()' и 'Private Function AnyNA() As Boolean' @Sean Scott – fobnicat

+0

N/m Я исправил это, взяв() от строк вызова и исправляя End Sub для завершения функции. Теперь он правильно отображает столбец, когда в столбце «I» выбран «N/A», но когда я перехожу к следующей строке, независимо от того, что я выбираю, он снова скрывает столбец «K». – fobnicat

+0

Ваше решение работает правильно? –

0

С помощью @Sean Скотта, я нашел решение:

Sub Worksheet_Change(ByVal Target As Range) 
     If Columns("K").EntireColumn.Hidden Then 
     If Target.Value = "N/A" Then 
      UnhideDocs 
     End If 
     ElseIf Not Columns("K").EntireColumn.Hidden And Not Target.Value = "N/A" Then 
     HideDocs 
     End If 
    End Sub 

Function AnyNA() As Boolean 
    For Row = 1 To Range("K" & Rows.Count).End(xlUp).Row 
    If Range("K" & Row).Value = "N/A" Then 
     AnyNA = True 
    End If 
    Next 
    AnyNA = False 
End Function 


    Sub UnhideDocs() 
    Columns("K").EntireColumn.Hidden = False 
    End Sub 

    Sub HideDocs() 
    Columns("K").EntireColumn.Hidden = True 
    End Sub