Добрый день,
друзья, помогите с решением.
Есть выпадающий список и 6-ть. колонок с заглавием "Объект сравнения №..."
Ожидаемый результат: при выборе из выпадающего списка (ВС) количество объектов сравнения (например 3 шт.) остальные колонки (Объект сравнения №4, №5, №6) должны скрываться.
Пробовал применить следующий макрос:
Option Explicit
Sub test()
Dim sht As Worksheet
Dim a As Integer
Set sht = ThisWorkbook.Worksheets("СП")
If sht.Cells(3, 4) = 1 Then
For a = 6 To 10
sht.Columns(a).Hidden = True
Next a
Else
For a = 6 To 10
sht.Columns(a).Hidden = False
Next a
End If
If sht.Cells(3, 4) = 2 Then
For a = 7 To 10
sht.Columns(a).Hidden = True
Next a
Else
For a = 7 To 10
sht.Columns(a).Hidden = False
Next a
End If
If sht.Cells(3, 4) = 3 Then
For a = 8 To 10
sht.Columns(a).Hidden = True
Next a
Else
For a = 8 To 10
sht.Columns(a).Hidden = False
Next a
End If
If sht.Cells(3, 4) = 4 Then
For a = 9 To 10
sht.Columns(a).Hidden = True
Next a
Else
For a = 9 To 10
sht.Columns(a).Hidden = False
Next a
End If
If sht.Cells(3, 4) = 5 Then
For a = 10 To 10
sht.Columns(a).Hidden = True
Next a
Else
For a = 10 To 10
sht.Columns(a).Hidden = False
Next a
End If
If sht.Cells(3, 4) = 6 Then
For a = 11 To 11
sht.Columns(a).Hidden = True
Next a
Else
For a = 11 To 11
sht.Columns(a).Hidden = False
Next a
End If
End Sub
Результат: программа отображает 5-ть колонок при значениях ВС от 1 до 5 и 6-ть колонок при значении 6.
Текст форматировали, а код забыли [МОДЕРАТОР]
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("D3"), Target) Is Nothing Then
With Application: .ScreenUpdating = False: .EnableEvents = False: End With
Columns("E:J").Hidden = True
Columns(Cells(3, 4).Value + 4).Hidden = False
With Application: .ScreenUpdating = True: .EnableEvents = True: End With
End If
End Sub
Проработал сабж.
Немного усложню вопрос.
При выборе значения 1-6 выпадающего списка листа "СП", на листе "СП" должно остаться соответствующее число колонок E-J, значения остальных колонок должны быть исключены из расчёта. На листах "А-1" и "Расчет Км СП " нужно скрыть соответствующие группы полей (подсвечено заливкой).
ЦитироватьПроработал сабж
И что вынесли? Только вопрос? Пробовали продолжить сами?
Использовал следующий код:
Option Explicit
Sub test()
Dim sht As Worksheet
Dim i As Integer
Dim num As Byte
Set sht = ThisWorkbook.Worksheets(СП")
num = sht.Cells(3, 4)
For i = 5 To num + 4
sht.Columns(i).Hidden = False
Next i
For i = num + 5 To 10
sht.Columns(i).Hidden = True
Next i
End Sub
Загвоздка в следующем:
- данные расположены на 3-х листах;
- скрывать в одном случае нужно колонки, в другом - строки;
- на листе А1 необходимо скрыть сгруппированные строки.
Цитата: Вася_Пупкин от 15.09.2015, 09:26
- скрывать в одном случае нужно колонки, в другом - строки;
проверяйте лист по названию и применяйте скрытие или по столбцу или по строке.
Зря отказываетесь от события Worksheet_Change. Или на это есть причины?
Зачем применять два цикла для скрытия/отображения, если можно одним махом, как я показал?
Цитироватьзначения остальных колонок должны быть исключены из расчёта
скрывать... нужно колонки... строки;
на листе А1 необходимо скрыть сгруппированные строки
Этот все не по теме.
Цитата: cheshiki1 от 15.09.2015, 09:36
Цитата: Вася_Пупкин от 15.09.2015, 09:26
- скрывать в одном случае нужно колонки, в другом - строки;
проверяйте лист по названию и применяйте скрытие или по столбцу или по строке.
Как быть с группой строк на листе А1?
Пытался применить код и к строкам. Пока безрезультатно. Пожалуйста помогите с синтаксисом цикла работы со строками внутри оператора with.
Кнопка цитирования не для ответа [МОДЕРАТОР]
Здравствуйте vikttur,
Никаких предубеждений относительно события Worksheet_Change у меня нет. Единственное, почему я не применил ваш метод, в итоге мы получаем не тот результат, который мне нужен. Скрипт отображает только одну колонку соответствующего объекта сравнения, вместо двух, трех, четырех нужных.
Цитироватьпри выборе из выпадающего списка (ВС) количество объектов сравнения (например 3 шт.) остальные колонки (Объект сравнения №4, №5, №6) должны скрываться.
А это кто писал?
Уважаемый vikttur.
Возможно я не совсем конкретно выразился. Имелось ввиду при выборе значения 3, остаются объекты 1,2,3, объекты 4,5,6 скрываются, при выборе 5 , отображаются объекты 1,2,3,4,5, 6-й объект скрывается.
Если у вас есть вопросы относительно тех. задания, не стесняйтесь, задавайте. С удовольствием отвечу на все.
Замените две строки. Получится такое:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("D3"), Target) Is Nothing Then
With Application: .ScreenUpdating = False: .EnableEvents = False: End With
With Target
Columns("E:J").Hidden = False
If .Value < 6 Then Range(Cells(1, .Value + 5), Cells(1, 10)).EntireColumn.Hidden = True
End With
With Application: .ScreenUpdating = True: .EnableEvents = True: End With
End If
End Sub