2015-06-09 5 views
3

Это мой первый пост, когда я настраивал и охотился на пару дней, и мне не удалось найти разрешение здесь или в другом месте.Excel VBA: EntireColumn.Hidden не работает в Worksheet_Change()

Использования Excel 2010 я редактирую существующую незащищенную книгу и создал EntireColumn.Hidden и EntireRow.Hidden в командах в Worksheet_Change() случае огня при изменении сота проверки данных, но они не работают.

Private Sub Worksheet_Change(ByVal Target As Range) 

With Application 
    .ScreenUpdating = False 
    .EnableEvents = False 
End With 

If Not Intersect(Target, Range("$C$2")) Is Nothing Then 
    Select Case Target.Value 
     Case "NO" 
      MsgBox "You just changed to HIDE"   '<= Proves it fires 
      Range("$C$3").Value = "Invisible"   '<= Does change cell 
      Columns("N:O").EntireColumn.Hidden = True '<= Doesn't hide 
     Case "YES" 
      MsgBox "You just changed to UNHIDE"  '<= Proves it fires 
      Range("$C$3").Value = "Visible"   '<= Does change cell 
      Columns("N:O").EntireColumn.Hidden = False '<= Doesn't unhide 
    End Select 
End If 

With Application 
    .ScreenUpdating = True 
    .EnableEvents = True 
End With 

End Sub 

Событие стрельбы ОК, как я msgbox эс, чтобы доказать это, и я могу изменить значения ячеек и т.д. с ним, но единственное, что не происходит фактическое скрытие/Отмена скрытия столбца /ряд.

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

Однако, когда я скопировал это в простой макрос это делает работу именно так, как требуется, скрывая правильные колонки, но при нажатии кнопки:

Sub HideThem() 
    Columns("N:O").EntireColumn.Hidden = True '<= DOES work 
End Sub 

Тем не менее, мне это нужно, чтобы обновить автоматически в зависимости от значения одной ячейки. Я даже пытался назвать этот мини-Sub из-за события Worksheet_Change(), но это тоже не сработало.

Понятно, что очень базовый код, поэтому он бесит, что я не могу заставить его работать! Существуют ли какие-либо известные конфликты с другими командами/событиями, кнопками на листе, изображениями, объединенными ячейками и т. Д., Которые могут препятствовать сокрытию столбцов/строк?

Я не могу на всю жизнь понять, почему строки/столбец не будут автоматически скрываться, когда они выполняются вручную (щелкните правой кнопкой мыши «Скрыть») или нажмите кнопку макроса.

Я даже пытался использовать CheckBox вместо ячейки YES/NO Data Validation огня кода (как это может быть приемлемо), но когда я пытаюсь вставить ActiveX CheckBox это говорит Невозможно вставить объект, даже в бренд новая пустая книга. Может ли это быть связанной проблемой?

Любые мысли об этом были бы очень признательны, поскольку я рву волосы!

+0

Что произойдет, если вы выполните хотя бы код в исходном листе? –

+0

Попробуйте 'Столбцы (« N: O »). Hidden = True', то есть удалить часть« EntireColumn » – kaybee99

+2

Работает здесь, на листе, с которым вы пытаетесь ее использовать, есть ли в них такие вещи, как объединенные ячейки. Просто для тестирования попробуйте удалить все форматирование из N: O и попробуйте затем – 99moorem

ответ

0

Предположим, у вас есть раскрывающийся список в ячейке C3 с двумя элементами: «Видимый» и «Невидимый». Следующий код скроет столбцы N и O, когда вы измените значение диапазона C3 с пустого/«видимого» на «невидимое». Перед этим действием вам нужно будет прочитать сообщение и нажать «ОК». Переход с «Невидимый» на «Видимый» предоставит вам окно с сообщением. Нажмите «ОК» и увидите, что скрытые столбцы раскрываются.

Private Sub Worksheet_Change(ByVal Target As Range) 
If Range("C3") = "Invisible" Then 
     MsgBox ("You just changed to HIDE") 
     Columns(14).Hidden = True 
     Columns(15).Hidden = True 
    Else 
    If Range("C3") = "Visible" Then 
     MsgBox ("You just changed to UNHIDE") 
     Columns(14).Hidden = False 
     Columns(15).Hidden = False 
    End If 
    End If 
End Sub 
Смежные вопросы