есть код для сокрытия/показа столбцов, которые отмечены непустыми ячейками в первой строке [vba]
Код
Private Sub sh_All_Click() On Error Resume Next rc_ = Rows("1:1").SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants, 23).Count If Err.Number > 0 Then Rows("1:1").SpecialCells(xlCellTypeConstants, 23).EntireColumn.Hidden = False All.Caption = "скрыть" Else Rows("1:1").SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants, 23).EntireColumn.Hidden = True All.Caption = "показать" End If
On Error GoTo 0 End Sub
[/vba]
помогите, пожалуйста, модифицировать код (если это возможно), под следующее условие
имеется таблица с множеством пустых столбцов (изначально) если столбец не пронумерован (ячейка в строке 2 в примере), то все столбцы справа от него (в заданном диапазоне) скрыты если ставим номер столбца, то справа от него показывается пустой столбец (остальные остаются скрыты) таким образом можно будет заносить данные по мере необходимости и при этом видеть продолжение таблицы без постоянного скролинга и данные справа будут иметь постоянный адрес ячеек.
условие скрытия/показа столбца - пустая/непустая ячейка в строке 2
чтобы столбцы скрывались или показывались если в ячейках строки 2 в диапазоне D:L пусто или непусто на первом листе показана развернутая таблица, на втором - как бы хотелось еë видеть
таких блоков столбцов может быть два (см. лист3)
Здравствуйте!
есть код для сокрытия/показа столбцов, которые отмечены непустыми ячейками в первой строке [vba]
Код
Private Sub sh_All_Click() On Error Resume Next rc_ = Rows("1:1").SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants, 23).Count If Err.Number > 0 Then Rows("1:1").SpecialCells(xlCellTypeConstants, 23).EntireColumn.Hidden = False All.Caption = "скрыть" Else Rows("1:1").SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants, 23).EntireColumn.Hidden = True All.Caption = "показать" End If
On Error GoTo 0 End Sub
[/vba]
помогите, пожалуйста, модифицировать код (если это возможно), под следующее условие
имеется таблица с множеством пустых столбцов (изначально) если столбец не пронумерован (ячейка в строке 2 в примере), то все столбцы справа от него (в заданном диапазоне) скрыты если ставим номер столбца, то справа от него показывается пустой столбец (остальные остаются скрыты) таким образом можно будет заносить данные по мере необходимости и при этом видеть продолжение таблицы без постоянного скролинга и данные справа будут иметь постоянный адрес ячеек.
условие скрытия/показа столбца - пустая/непустая ячейка в строке 2
чтобы столбцы скрывались или показывались если в ячейках строки 2 в диапазоне D:L пусто или непусто на первом листе показана развернутая таблица, на втором - как бы хотелось еë видеть
таких блоков столбцов может быть два (см. лист3)карандаш
У столбцов с заполненными данными д.б. заголовки: [vba]
Код
Sub SPHide() Dim a As Range Columns.Hidden = 0 On Error Resume Next For Each a In Range("c2", Cells(2, Columns.Count).End(xlToLeft)).SpecialCells(4).Areas a.Select a.Offset(, 1).Resize(, a.Cells.Count - 1).EntireColumn.Hidden = -1 Next End Sub
[/vba]
У столбцов с заполненными данными д.б. заголовки: [vba]
Код
Sub SPHide() Dim a As Range Columns.Hidden = 0 On Error Resume Next For Each a In Range("c2", Cells(2, Columns.Count).End(xlToLeft)).SpecialCells(4).Areas a.Select a.Offset(, 1).Resize(, a.Cells.Count - 1).EntireColumn.Hidden = -1 Next End Sub
KuklP, простите, если я правильно понимаю, то "End(xlToLeft)" означает конец наличия данных т.е. перебор ячеек, пока не кончаться какие-либо данные?
но на итоговом листе необходимо иметь пару таких блоков последовательно, как на Листе 3 в примере. первые два листа были приведены для описания сути процесса сокрытия/показа, а в конечном варианте надо скрывать/показывать столбцы в двух таких блоках независимо друг от друга.
или я неправильно понял Вашу запись?
2. второй вопрос: на какое действие системы я должен назначить данный код? ведь кнопки-то нет. Есть только действие пользователя по заполнению или очищению ячеек в строке 2 подскажите, пожалуйста
KuklP, простите, если я правильно понимаю, то "End(xlToLeft)" означает конец наличия данных т.е. перебор ячеек, пока не кончаться какие-либо данные?
но на итоговом листе необходимо иметь пару таких блоков последовательно, как на Листе 3 в примере. первые два листа были приведены для описания сути процесса сокрытия/показа, а в конечном варианте надо скрывать/показывать столбцы в двух таких блоках независимо друг от друга.
или я неправильно понял Вашу запись?
2. второй вопрос: на какое действие системы я должен назначить данный код? ведь кнопки-то нет. Есть только действие пользователя по заполнению или очищению ячеек в строке 2 подскажите, пожалуйстакарандаш
KuklP, простите, если я правильно понимаю, то "End(xlToLeft)" означает конец наличия данных т.е. перебор ячеек, пока не кончаться какие-либо данные?
Найдет последнюю заполненную ячейку в указанной строке. Поэтому и писал:
Цитата (KuklP)
У столбцов с заполненными данными д.б. заголовки
Если же Вы знаете последнюю ячейку в строке 2 и она постоянна, то можете указать ее. Избавите Экс от лишних вычислений P.S. в личку стоит писать, только если нет возможности в примере НЕ приводить персональных(секретных) данных. Ну, или если хотите оплатить услуги. Все остальное в теме, на форуме. И не стоит обращаться в теме лично к кому-то. Обращайтесь к форуму, это существенно увеличит Ваши шансы быстрей получить ответ. Форумчане, видя личное обращение, просто покидают тему(законы вежливости).
Цитата (карандаш)
KuklP, простите, если я правильно понимаю, то "End(xlToLeft)" означает конец наличия данных т.е. перебор ячеек, пока не кончаться какие-либо данные?
Найдет последнюю заполненную ячейку в указанной строке. Поэтому и писал:
Цитата (KuklP)
У столбцов с заполненными данными д.б. заголовки
Если же Вы знаете последнюю ячейку в строке 2 и она постоянна, то можете указать ее. Избавите Экс от лишних вычислений P.S. в личку стоит писать, только если нет возможности в примере НЕ приводить персональных(секретных) данных. Ну, или если хотите оплатить услуги. Все остальное в теме, на форуме. И не стоит обращаться в теме лично к кому-то. Обращайтесь к форуму, это существенно увеличит Ваши шансы быстрей получить ответ. Форумчане, видя личное обращение, просто покидают тему(законы вежливости).KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
P.S. в личку стоит писать, только если нет возможности в примере НЕ приводить персональных(секретных) данных. Ну, или если хотите оплатить услуги.
именно так. Первое имеет место, к сожалению. Второе не исключается (и приветствуется) - одно дело подсказать, другое - выполнить некоторый объем работы, затратить время на не очень интересный случай. плюс третье - файл в 2010.
Цитата (KuklP)
Все остальное в теме, на форуме. И не стоит обращаться в теме лично к кому-то. Обращайтесь к форуму, это существенно увеличит Ваши шансы быстрей получить ответ.
обращался (может как-то не так - не все понимаю в правилах и нюансах общения). К сожалению, не получилось.
Цитата (KuklP)
Форумчане, видя личное обращение, просто покидают тему(законы вежливости).
не совсем понял... Личка разве не для личных вопросов? мой вопрос в личку не касался содержания данной темы. хоть и не понял, но учту на будущее.
KuklP,
Цитата (KuklP)
P.S. в личку стоит писать, только если нет возможности в примере НЕ приводить персональных(секретных) данных. Ну, или если хотите оплатить услуги.
именно так. Первое имеет место, к сожалению. Второе не исключается (и приветствуется) - одно дело подсказать, другое - выполнить некоторый объем работы, затратить время на не очень интересный случай. плюс третье - файл в 2010.
Цитата (KuklP)
Все остальное в теме, на форуме. И не стоит обращаться в теме лично к кому-то. Обращайтесь к форуму, это существенно увеличит Ваши шансы быстрей получить ответ.
обращался (может как-то не так - не все понимаю в правилах и нюансах общения). К сожалению, не получилось.
Цитата (KuklP)
Форумчане, видя личное обращение, просто покидают тему(законы вежливости).
не совсем понял... Личка разве не для личных вопросов? мой вопрос в личку не касался содержания данной темы. хоть и не понял, но учту на будущее.карандаш
Цитата (KuklP писал(а)): Форумчане, видя личное обращение, просто покидают тему(законы вежливости). не совсем понял... Личка разве не для личных вопросов?
Имелось ввиду не в личку, а на форуме, если обращаешься к кому-то лично, то остальные, даже зная ответ, могут покинуть тему.
Цитата (карандаш)
Цитата (KuklP писал(а)): Форумчане, видя личное обращение, просто покидают тему(законы вежливости). не совсем понял... Личка разве не для личных вопросов?
Имелось ввиду не в личку, а на форуме, если обращаешься к кому-то лично, то остальные, даже зная ответ, могут покинуть тему.Wasilich
попробовал объединить обе подсказки, от Wasilic и KuklP, т.к. необходимо иметь обе функциональности Доктор Франкенштейн из меня ещë тот... Мутант живет, но не так, как бы хотелось
вот код
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim a As Range If Not Application.Intersect(Range("g6:AJ27"), Target) Is Nothing Then Columns.Hidden = 0 On Error Resume Next For Each a In Range("g6", Cells(6, Columns.Count).End(xlToLeft)).SpecialCells(4).Areas a.Select a.Offset(, 1).Resize(, a.Cells.Count - 1).EntireColumn.Hidden = -1 Next
'If Target <> "" Then ' Columns(Target.Column + 1).EntireColumn.Hidden = False 'Else ' Columns(Target.Column + 1).EntireColumn.Hidden = True 'End If End If End Sub
[/vba]
хотелось бы, чтобы : 1. красные столбцы не появлялись, а зелëные не исчезали при срабатывании функции. (это можно исправить с помощью костылей в виде заполненных или пустых ячеек строке 6. Но это не красиво и не дает решения в общем виде) 2. чтобы столбцы скрывались, если не только в строке заголовка (№6), но и в строках с данными есть данные (т.к. сумма считается по всей строке и невозможно сделать сумму только по видимым ячейкам) 3. определить в коде функции константы, которые можно было бы менять в зависимости от кол-ва столбцов. Чтобы менять в одном месте, а не править в трех местах в коде.
помогите, пожалуйста, разобраться (манипуляции с номером строки и столбцом G приводят к непредсказуемым и необъяснимым результатам, a не понимая смысла кода подобрать верный вариант не получилось)
Wasilic, понял, спасибо за пояснение
вопрос, к сожалению, остался не закрытым.
попробовал объединить обе подсказки, от Wasilic и KuklP, т.к. необходимо иметь обе функциональности Доктор Франкенштейн из меня ещë тот... Мутант живет, но не так, как бы хотелось
вот код
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim a As Range If Not Application.Intersect(Range("g6:AJ27"), Target) Is Nothing Then Columns.Hidden = 0 On Error Resume Next For Each a In Range("g6", Cells(6, Columns.Count).End(xlToLeft)).SpecialCells(4).Areas a.Select a.Offset(, 1).Resize(, a.Cells.Count - 1).EntireColumn.Hidden = -1 Next
'If Target <> "" Then ' Columns(Target.Column + 1).EntireColumn.Hidden = False 'Else ' Columns(Target.Column + 1).EntireColumn.Hidden = True 'End If End If End Sub
[/vba]
хотелось бы, чтобы : 1. красные столбцы не появлялись, а зелëные не исчезали при срабатывании функции. (это можно исправить с помощью костылей в виде заполненных или пустых ячеек строке 6. Но это не красиво и не дает решения в общем виде) 2. чтобы столбцы скрывались, если не только в строке заголовка (№6), но и в строках с данными есть данные (т.к. сумма считается по всей строке и невозможно сделать сумму только по видимым ячейкам) 3. определить в коде функции константы, которые можно было бы менять в зависимости от кол-ва столбцов. Чтобы менять в одном месте, а не править в трех местах в коде.
помогите, пожалуйста, разобраться (манипуляции с номером строки и столбцом G приводят к непредсказуемым и необъяснимым результатам, a не понимая смысла кода подобрать верный вариант не получилось)карандаш