2015-09-17 3 views
1

Я довольно новичок в Excel VBA, и я считаю, что следующий код, который мне нужен, был бы довольно упрощенным, однако у меня была очень ограниченная экспозиция событий Worksheet_Change.Случай изменения рабочего листа - скрытые столбцы

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

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

If range("E6").value = 5 then 
Columns("CG:ES").hidden = false 
Columns("CG:ES").Hidden = true 
else 
if range("E6").value = 6 then 
Columns("CG:ES").hidden = false 
Columns("CT:ES").hidden = true 
else 
if range("E6").value = 7 then 
Columns("CG:ES").hidden = false 
Columns("DG:ES").hidden = true 
else 
if range("E6").value = 8 then 
Columns("CG:ES").hidden = false 
Columns("DT:ES").hidden = true 
else 
if range("E6").value = 9 then 
Columns("CG:ES").hidden = false 
Columns("EG:ES").hidden = true 
else 
if range("E6").value = 10 then 
Columns("CG:ES").hidden = false 

end if 
end if 
end if 
end if 
end if 

End sub 

enter image description here

ответ

1

Ниже перечислены ваши вложенные операторы If для Select Case statement. Это обеспечивает немного большую удобочитаемость и должно быть легко расшириться, если возникнет такая необходимость.

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Range("E6")) Is Nothing Then 
     On Error GoTo bm_Safe_Exit 
     Application.ScreenUpdating = False 
     Application.EnableEvents = False 
     Columns("CG:ES").Hidden = False 
     Select Case Range("E6").Value2 
      Case 5 
       Columns("CG:ES").Hidden = True 
      Case 6 
       Columns("CT:ES").Hidden = True 
      Case 7 
       Columns("DG:ES").Hidden = True 
      Case 8 
       Columns("DT:ES").Hidden = True 
      Case 9 
       Columns("EG:ES").Hidden = True 
     End Select 
    End If 

bm_Safe_Exit: 
    Application.EnableEvents = True 
    Application.ScreenUpdating = True 
End Sub 

События и обновление экрана отключены во время обработки. Первый не является абсолютно необходимым, но последний должен уменьшить «вспышку» экрана.

Макрос события Worksheet_Change переходит на страницу кода рабочего листа, нажав правой кнопкой мыши на вкладке «Имя листа» и выбрав «Просмотреть код».

+0

Спасибо, что работает отлично :) –

0
Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$E$6" Then 
     ' your logic here by switching on Target.Value 
    End If 
End Sub 
+0

Часто 'Target' может быть больше, чем одна ячейка, одна из которых может быть $ E $ 6. – Jeeped

+0

@jeeped согласен, в основном при выполнении copy.paste, не так ли? –

+1

В первую очередь да, но также Fill Down (или Right) и Ctrl + Enter, чтобы блокировать выбор среди других. – Jeeped

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