Помогите, пожалуйста, с такой штукой (наверное, это просто, но у меня опыта еще не хватает). Есть перечень имен, а есть Флажок (checkox) с определенным именем - в примере "Вася". При стоящей на Васе галке, столбец с именем "Вася" делается скрытым. Я сделал это вручную, т.е. посмотрел, в какой ячейке прописан Вася и ввел это значение в макрос. А как сделать, чтобы название Флажка было завязано с текстом в ячейке? То есть, если я заменю имя Флажка с Васи на Колю, макрос снова будет убирать Васю, на Колю ему плевать ), а хотелось бы четкой привязки. Спасибо.
Код
Sub Флажок1_Щелчок()
Application.ScreenUpdating = False
If ActiveSheet.CheckBoxes("Check box 1";).Value = 1 Then
Cells(4, 6).Select
Selection.EntireColumn.Hidden = True
Else
Cells(4, 6).Select
Selection.EntireColumn.Hidden = False
End If
Application.ScreenUpdating = True
End Sub
Sanja, нет, он у вас прячет активный столбец. Куда курсор поставить, то и спрячет.
Ааа, рассмотрел еще два макроса, просто они не завязаны на Флажке. Сейчас поковыряюсь. ActiveSheet.CheckBoxes("Check box 1").Characters.Text - похоже то, что мне нужно. Только имя Флажка должно быть неизменным.
Грубо говоря, вижу макрос таким: If ActiveSheet.CheckBoxes("Check box 1").Value = 1 Then поиск имени чекбокса (ActiveSheet.CheckBoxes("Check box 1").Characters.Text) в заданном диапазоне ячейка с найденным значением активна Selection.EntireColumn.Hidden = True
Вариант с проверкой значения ячейки. В модуле листа:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
Application.ScreenUpdating = False
If Not Application.Intersect(Range("C3"), Target) Is Nothing Then
For i = 6 To 16
If Cells(3, 3).Value = Cells(4, i).Value Or Cells(3, 3).Value = Empty Then
Columns(i).Hidden = False
Else
Columns(i).Hidden = True
End If
Next i
End If
Application.ScreenUpdating = True
End Sub
Получилось, но не до конца. Макрос заработал для отдельного Флажка, но если привязываю цикл (чтобы этот макрос привязать сразу к двум флажкам), выдает ошибку... Не подскажете, в чем тут фикус?
Код
Sub Флажок1_Щелчок()
Dim i As Integer
Dim p As Integer
Dim s As String
p = 1
s = "check box " & p
Application.ScreenUpdating = False
'For p = 1 To 2
For i = 1 To 15
If ActiveSheet.CheckBoxes(s).Value = 1 Then
If Cells(4, i).Value = ActiveSheet.CheckBoxes(s).Characters.Text Then
Cells(4, i).Select
Selection.EntireColumn.Hidden = True
End If
Else
Cells(4, i).Select
Selection.EntireColumn.Hidden = False
End If
'Next
Next
Cells(1, 1).Select
Application.ScreenUpdating = True
End Sub
Оформяйте код тэгами (кнопулечка такая есть для форматирования сообщения)[МОДЕРАТОРЫ]
Sergei_A, ооо, спасибо, все как надо! Не подскажете, что такое ActiveSheet.Shapes(Application.Caller).Name в коде? Именно название (имя) приложения (в данном случае чекбокса)?
Sergei_A, спасибо огромное, все работает. Хотя, даже если написать s = Application.Caller, выдает ошибку. Я на нее забиваю, запускаю макрос и все работает. Чекбоксов будет порядка 30. Это на что-то влияет?
Какой Excel на работе? Я проверил на 2007 и 2010 - ошибок нет. Может кто-то из гуру подскажет в чем может быть причина. Я не знаю
Спросил про количество, думая как можно обойти проблему. Каждому чекбоксу маленький макрос, в котором он записывает своё имя в переменную и вызывает основную продцедуру, передавая туда пременную с именем.
еще проверьте так
Код
On Error Resume Next
s = Application.Caller
On Error GoTo 0
Sergei_A, RAN, ошибка появляется, если запускаю в отладчике, да. А если запускать непосредственно чекбоксом, то все нормально, как я и писал. Теперь, кажись, догадываюсь, в чем дело До нажатия не существует такого имени, и оно берется от конкретного объекта, к которому я привязал макрос.