Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос скрытие/отображение строк на кнопку - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Макрос скрытие/отображение строк на кнопку
Serge_007 Дата: Вторник, 13.11.2012, 14:41 | Сообщение № 21
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Матраскин)
Даёшь аксесс

Да, как-то так хотя бы, но если
Quote (amur84)
Строк будет более 100

то вобщем-то и Excel'ем можно обойтись biggrin

Quote (Матраскин)
там VBA

Там и сводные тоже есть wink


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Матраскин)
Даёшь аксесс

Да, как-то так хотя бы, но если
Quote (amur84)
Строк будет более 100

то вобщем-то и Excel'ем можно обойтись biggrin

Quote (Матраскин)
там VBA

Там и сводные тоже есть wink

Автор - Serge_007
Дата добавления - 13.11.2012 в 14:41
Tviga Дата: Вторник, 13.11.2012, 15:01 | Сообщение № 22
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 20 ±
Замечаний: 0% ±

Quote (amur84)
И опят таки напоминаю - листов с базами будет с десяток.


так у вас и макросов тогда будет столько же. Если я не ошибаюсь. Базы же разные будут. на разных листах.
 
Ответить
Сообщение
Quote (amur84)
И опят таки напоминаю - листов с базами будет с десяток.


так у вас и макросов тогда будет столько же. Если я не ошибаюсь. Базы же разные будут. на разных листах.

Автор - Tviga
Дата добавления - 13.11.2012 в 15:01
amur84 Дата: Вторник, 13.11.2012, 15:05 | Сообщение № 23
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 8 ±
Замечаний: 0% ±

Quote (Tviga)
так у вас и макросов тогда будет столько же

Верно, но по скелету все идентичные.


Новый день. А что успел сделать ты?
 
Ответить
Сообщение
Quote (Tviga)
так у вас и макросов тогда будет столько же

Верно, но по скелету все идентичные.

Автор - amur84
Дата добавления - 13.11.2012 в 15:05
amur84 Дата: Вторник, 13.11.2012, 15:05 | Сообщение № 24
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 8 ±
Замечаний: 0% ±

Ладно, давайте не будем пока углубляться в дебри моей задумки. Попробую поставить задачу более конкретно.

Итак есть файл example.xls. Начнем с одной кнопки - "Компьютеры". При нажатии на кнопку должен выполняться макрос по следующему примерному алгоритму:
- определение "наименования" макроса
- Если наименование макроса ВКЛ
_то
__- поиск строк в столбце С которых встречаются значения "Компьютеры"
__- Если параметр скрытности найденных строк ИСТИНА
___то
___- изменить на ЛОЖЬ
___иначе
___- оставить ИСТИНА
__и
__задать "наименование" макросу ОТКЛ
_иначе
__- поиск строк в столбце С которых встречаются значения "Компьютеры"
__- Если параметр скрытности найденных строк ИСТИНА
___то
___- оставить ИСТИНА
___иначе
___- изменить на ЛОЖЬ
__и
__задать "наименование" макросу ВКЛ

Если отображение "наименования" макроса на кнопке сложно, то в качестве "наименования" макроса можно попробовать использовать какую-либо ячейку. К примеру, в таблице будет выглядеть так:

| Компьютеры | кнопка | ОТКЛ |

Возможно, в моем алгоритме не хватает каких либо пунктов, типа "отключение обновления экрана" и тому подобные - тут я совсем бессилен, поэтому данные пункты на ваше усмотрение.


Новый день. А что успел сделать ты?

Сообщение отредактировал amur84 - Вторник, 13.11.2012, 15:06
 
Ответить
СообщениеЛадно, давайте не будем пока углубляться в дебри моей задумки. Попробую поставить задачу более конкретно.

Итак есть файл example.xls. Начнем с одной кнопки - "Компьютеры". При нажатии на кнопку должен выполняться макрос по следующему примерному алгоритму:
- определение "наименования" макроса
- Если наименование макроса ВКЛ
_то
__- поиск строк в столбце С которых встречаются значения "Компьютеры"
__- Если параметр скрытности найденных строк ИСТИНА
___то
___- изменить на ЛОЖЬ
___иначе
___- оставить ИСТИНА
__и
__задать "наименование" макросу ОТКЛ
_иначе
__- поиск строк в столбце С которых встречаются значения "Компьютеры"
__- Если параметр скрытности найденных строк ИСТИНА
___то
___- оставить ИСТИНА
___иначе
___- изменить на ЛОЖЬ
__и
__задать "наименование" макросу ВКЛ

Если отображение "наименования" макроса на кнопке сложно, то в качестве "наименования" макроса можно попробовать использовать какую-либо ячейку. К примеру, в таблице будет выглядеть так:

| Компьютеры | кнопка | ОТКЛ |

Возможно, в моем алгоритме не хватает каких либо пунктов, типа "отключение обновления экрана" и тому подобные - тут я совсем бессилен, поэтому данные пункты на ваше усмотрение.

Автор - amur84
Дата добавления - 13.11.2012 в 15:05
amur84 Дата: Вторник, 13.11.2012, 15:12 | Сообщение № 25
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 8 ±
Замечаний: 0% ±

Как вариант, представлен файл example2.xls.

В данном файле скрытие и отображение строк производится путем выбора значения соответствующей ячейки - "+" или "-".
В этом случае макрос должен реагировать на изменения в этой ячейке. Примерный алгоритм для тех же "Компьютеров" следующий:

- поиск строк в столбце С которых встречаются значения "Компьютеры"
- Если значение в ячейке J2 равно "-"
_то
_- присвоить значение параметра скрытности найденых строк ИСТИНА
_иначе
__- присвоить значение параметра скрытности найденых строк ЛОЖЬ


Новый день. А что успел сделать ты?
 
Ответить
СообщениеКак вариант, представлен файл example2.xls.

В данном файле скрытие и отображение строк производится путем выбора значения соответствующей ячейки - "+" или "-".
В этом случае макрос должен реагировать на изменения в этой ячейке. Примерный алгоритм для тех же "Компьютеров" следующий:

- поиск строк в столбце С которых встречаются значения "Компьютеры"
- Если значение в ячейке J2 равно "-"
_то
_- присвоить значение параметра скрытности найденых строк ИСТИНА
_иначе
__- присвоить значение параметра скрытности найденых строк ЛОЖЬ

Автор - amur84
Дата добавления - 13.11.2012 в 15:12
Tviga Дата: Вторник, 13.11.2012, 15:28 | Сообщение № 26
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 20 ±
Замечаний: 0% ±

всегда ругала себя за любопытство, и все же..

дайте все свои файлы и таблички. В том виде в котором они есть.
 
Ответить
Сообщениевсегда ругала себя за любопытство, и все же..

дайте все свои файлы и таблички. В том виде в котором они есть.

Автор - Tviga
Дата добавления - 13.11.2012 в 15:28
amur84 Дата: Вторник, 13.11.2012, 15:29 | Сообщение № 27
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 8 ±
Замечаний: 0% ±

Для файла example2.xls нашел такой код:
[vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range)

      If Target.Address <> Range("J1").Address Then Exit Sub
      Application.ScreenUpdating = False
      Application.Calculation = xlCalculationManual

      Dim cell As Range, ra As Range, hidden_ra As Range
      Set ra = Range([A8], Range("A" & Rows.Count).End(xlUp)).Offset(, 2)
        
      For Each cell In ra.Cells
          If cell.Value = "Компьютеры" Then If hidden_ra Is Nothing Then Set hidden_ra = cell Else Set hidden_ra = Union(cell, hidden_ra)
      Next cell

      ra.EntireRow.Hidden = False
      hidden_ra.EntireRow.Hidden = True

      Application.Calculation = xlCalculationAutomatic
End Sub
[/vba]

Но он только скрывает при изменениях в ячейке J2. И еще отрывает все другие строки...
Как подкорректировать под мои нужды?


Новый день. А что успел сделать ты?

Сообщение отредактировал amur84 - Вторник, 13.11.2012, 15:36
 
Ответить
СообщениеДля файла example2.xls нашел такой код:
[vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range)

      If Target.Address <> Range("J1").Address Then Exit Sub
      Application.ScreenUpdating = False
      Application.Calculation = xlCalculationManual

      Dim cell As Range, ra As Range, hidden_ra As Range
      Set ra = Range([A8], Range("A" & Rows.Count).End(xlUp)).Offset(, 2)
        
      For Each cell In ra.Cells
          If cell.Value = "Компьютеры" Then If hidden_ra Is Nothing Then Set hidden_ra = cell Else Set hidden_ra = Union(cell, hidden_ra)
      Next cell

      ra.EntireRow.Hidden = False
      hidden_ra.EntireRow.Hidden = True

      Application.Calculation = xlCalculationAutomatic
End Sub
[/vba]

Но он только скрывает при изменениях в ячейке J2. И еще отрывает все другие строки...
Как подкорректировать под мои нужды?

Автор - amur84
Дата добавления - 13.11.2012 в 15:29
AlexM Дата: Вторник, 13.11.2012, 16:06 | Сообщение № 28
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Посмотрите файл. Может так подойдет?
Кроме вставки кода убрал объединение 5-7 строк.
К сообщению приложен файл: example2_new.xls (42.5 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеПосмотрите файл. Может так подойдет?
Кроме вставки кода убрал объединение 5-7 строк.

Автор - AlexM
Дата добавления - 13.11.2012 в 16:06
amur84 Дата: Вторник, 13.11.2012, 16:39 | Сообщение № 29
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 8 ±
Замечаний: 0% ±

Quote (AlexM)
Может так подойдет?

В принципе - то что нужно. Мне только осталось разобраться в коде, чтобы править его под другие базы и значения.
Возможно ли расписать строки кода - на что они влияют?


Новый день. А что успел сделать ты?
 
Ответить
Сообщение
Quote (AlexM)
Может так подойдет?

В принципе - то что нужно. Мне только осталось разобраться в коде, чтобы править его под другие базы и значения.
Возможно ли расписать строки кода - на что они влияют?

Автор - amur84
Дата добавления - 13.11.2012 в 16:39
AlexM Дата: Вторник, 13.11.2012, 16:58 | Сообщение № 30
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Можно
Макрос обрабатывает событие изменений на листе (вставляется в модуль листа)
[vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("D1:D2, J1:J2"), Target) Is Nothing Then
'Если изменяемая ячейка попадает в указанные диапазоны, то присваиваем переменным значения
Tip = Target.Offset(0, -1)
'Tip - понятно и есть Тип (значение левой ячейки от изменяемой)
cTip = IIf(Target.Column = 4, 2, 3)
'CTip - если изменяемая ячейка в 4-ом столбце, то 2, иначе 3 (это номера столбцов в таблице с типом и подтипом)
False_True = IIf(Target = "+", False, True)
'False_True - В зависимости от того что в ячейке присваивается соответствующее значение False или True
iHidden
'Запуск макроса обработки строк
End If
End Sub
[/vba]

[vba]
Code
Public Tip As String
Public False_True As Boolean
Public cTip As Integer
'Описание переменных
Public Sub iHidden()
Hidden_Row = 65536 - Columns(1).SpecialCells(xlVisible).Count
'Счет скрытых строк
For i = 6 To Range("A5").End(xlDown).Row + Hidden_Row
'Цикл с 6 ячейки до последней заполненной видимой плюс навидимые строки
If Cells(i, cTip) = Tip Then Rows(i).EntireRow.Hidden = False_True
'скрытие или отображение строк в зависимости от значений переменных
Next i
End Sub
[/vba]



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Вторник, 13.11.2012, 17:03
 
Ответить
СообщениеМожно
Макрос обрабатывает событие изменений на листе (вставляется в модуль листа)
[vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("D1:D2, J1:J2"), Target) Is Nothing Then
'Если изменяемая ячейка попадает в указанные диапазоны, то присваиваем переменным значения
Tip = Target.Offset(0, -1)
'Tip - понятно и есть Тип (значение левой ячейки от изменяемой)
cTip = IIf(Target.Column = 4, 2, 3)
'CTip - если изменяемая ячейка в 4-ом столбце, то 2, иначе 3 (это номера столбцов в таблице с типом и подтипом)
False_True = IIf(Target = "+", False, True)
'False_True - В зависимости от того что в ячейке присваивается соответствующее значение False или True
iHidden
'Запуск макроса обработки строк
End If
End Sub
[/vba]

[vba]
Code
Public Tip As String
Public False_True As Boolean
Public cTip As Integer
'Описание переменных
Public Sub iHidden()
Hidden_Row = 65536 - Columns(1).SpecialCells(xlVisible).Count
'Счет скрытых строк
For i = 6 To Range("A5").End(xlDown).Row + Hidden_Row
'Цикл с 6 ячейки до последней заполненной видимой плюс навидимые строки
If Cells(i, cTip) = Tip Then Rows(i).EntireRow.Hidden = False_True
'скрытие или отображение строк в зависимости от значений переменных
Next i
End Sub
[/vba]

Автор - AlexM
Дата добавления - 13.11.2012 в 16:58
amur84 Дата: Вторник, 13.11.2012, 17:30 | Сообщение № 31
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 8 ±
Замечаний: 0% ±

Quote (AlexM)
Можно

Спасибо большое за Ваш труд!
Здесь описание переменных, как я понимаю, происходит одинаково для каждого листа всей книги. А если в другом листе, к примеру, столбцы с типами/подтипами будут смещены от исходного положения?
Если количество типов/подтипов будет более двух, тогда код придется менять практически полностью? И описание переменных будет другое, и строка "сTip = ....." будет иначе выглядеть. Верно?

В принципе более универсального кода пока не прошу. Будем с этим пытаться извратиться.

Но вот вместе с Tviga мы выяснили, что "Автофильтр" 2003 версии отличается от него же в версиях 2007 и выше. И в версиях 2007 и выше можно использовать "галочки" для отображения/скрытия строк, что и требуется выполнять запрашиваемым мной макросом. Поэтому возникает вопрос - можно ли с помощью простого кода в 2003 реализовать автофильтр как в 2007? Или в данном случае код будет довольно не "простой"?


Новый день. А что успел сделать ты?

Сообщение отредактировал amur84 - Вторник, 13.11.2012, 18:08
 
Ответить
Сообщение
Quote (AlexM)
Можно

Спасибо большое за Ваш труд!
Здесь описание переменных, как я понимаю, происходит одинаково для каждого листа всей книги. А если в другом листе, к примеру, столбцы с типами/подтипами будут смещены от исходного положения?
Если количество типов/подтипов будет более двух, тогда код придется менять практически полностью? И описание переменных будет другое, и строка "сTip = ....." будет иначе выглядеть. Верно?

В принципе более универсального кода пока не прошу. Будем с этим пытаться извратиться.

Но вот вместе с Tviga мы выяснили, что "Автофильтр" 2003 версии отличается от него же в версиях 2007 и выше. И в версиях 2007 и выше можно использовать "галочки" для отображения/скрытия строк, что и требуется выполнять запрашиваемым мной макросом. Поэтому возникает вопрос - можно ли с помощью простого кода в 2003 реализовать автофильтр как в 2007? Или в данном случае код будет довольно не "простой"?

Автор - amur84
Дата добавления - 13.11.2012 в 17:30
Tviga Дата: Вторник, 13.11.2012, 18:02 | Сообщение № 32
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 20 ±
Замечаний: 0% ±

Quote (amur84)
А если в другой книге, к примеру


вот поэтому я вам и говорила - выкладывайте базу ту - которая есть. Что бы люди не тратили время на написание кодов, которые потом придется переписывать.

может есть смысл просто переустановить эксель. ??
 
Ответить
Сообщение
Quote (amur84)
А если в другой книге, к примеру


вот поэтому я вам и говорила - выкладывайте базу ту - которая есть. Что бы люди не тратили время на написание кодов, которые потом придется переписывать.

может есть смысл просто переустановить эксель. ??

Автор - Tviga
Дата добавления - 13.11.2012 в 18:02
amur84 Дата: Вторник, 13.11.2012, 18:11 | Сообщение № 33
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 8 ±
Замечаний: 0% ±

Quote (Tviga)
Цитата, amur84 писал(а):
А если в другой книге, к примеру


Опечатался. "В другом листе" имелось ввиду. В посте поправил.

Quote (Tviga)
может есть смысл просто переустановить эксель. ??

Я то переставлю Excel. А вот будут ли его переставлять остальные пользователи?...

В любом случае написанный AlexM код мне пригодится.


Новый день. А что успел сделать ты?
 
Ответить
Сообщение
Quote (Tviga)
Цитата, amur84 писал(а):
А если в другой книге, к примеру


Опечатался. "В другом листе" имелось ввиду. В посте поправил.

Quote (Tviga)
может есть смысл просто переустановить эксель. ??

Я то переставлю Excel. А вот будут ли его переставлять остальные пользователи?...

В любом случае написанный AlexM код мне пригодится.

Автор - amur84
Дата добавления - 13.11.2012 в 18:11
AlexM Дата: Вторник, 13.11.2012, 19:47 | Сообщение № 34
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Немного изменил код.
Теперь событие обрабатывается в модуле "Эта книга" и теперь нет надобности коды событий вставлять в модули листов.
Введена еще одна переменная, передающая название листа, на котором произошли изменения.

Если на листах таблицы отличаются, то и под это можно сделать макрос, но лучше стандартизировать таблицу хотя бы в пределах одной книги.
К сообщению приложен файл: example3_new.xls (51.5 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеНемного изменил код.
Теперь событие обрабатывается в модуле "Эта книга" и теперь нет надобности коды событий вставлять в модули листов.
Введена еще одна переменная, передающая название листа, на котором произошли изменения.

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

Автор - AlexM
Дата добавления - 13.11.2012 в 19:47
amur84 Дата: Среда, 14.11.2012, 02:07 | Сообщение № 35
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 8 ±
Замечаний: 0% ±

Quote (AlexM)
Немного изменил код.

Спасибо. Посмотрел, приму к сведению.

Но таблицы будут отличаться и поэтому придется вставлять коды событий в модули листов.
Вот я уже ответил сам себе на свои вопросы в посте 31. В приложенном файле на листе 3 реализовал и смещение столбцов с типами, и добавление еще одного подтипа.

Начал дальше осваивать и на листе 5 попытался написать тоже самое, но для столбцов. Событие не происходит и ошибки не выдает. Смотрю уже около получаса на код, не пойму где ошибся.
А на листе 4 еще и по столбцам выполнил скрытие.

Создавал темку не для получения готового кода, а для того, чтобы разобраться, как его писать на данную функцию. Нужен был начальный код для примера, так как я не силен в названиях функций.
В принципе тема исчерпана. Спасибо откликнувшимся, в частности AlexM. Файл прикладываю для примера и дальнейшей критики, если кому интересно.
К сообщению приложен файл: example2_new2.xls (68.5 Kb)


Новый день. А что успел сделать ты?

Сообщение отредактировал amur84 - Среда, 14.11.2012, 02:40
 
Ответить
Сообщение
Quote (AlexM)
Немного изменил код.

Спасибо. Посмотрел, приму к сведению.

Но таблицы будут отличаться и поэтому придется вставлять коды событий в модули листов.
Вот я уже ответил сам себе на свои вопросы в посте 31. В приложенном файле на листе 3 реализовал и смещение столбцов с типами, и добавление еще одного подтипа.

Начал дальше осваивать и на листе 5 попытался написать тоже самое, но для столбцов. Событие не происходит и ошибки не выдает. Смотрю уже около получаса на код, не пойму где ошибся.
А на листе 4 еще и по столбцам выполнил скрытие.

Создавал темку не для получения готового кода, а для того, чтобы разобраться, как его писать на данную функцию. Нужен был начальный код для примера, так как я не силен в названиях функций.
В принципе тема исчерпана. Спасибо откликнувшимся, в частности AlexM. Файл прикладываю для примера и дальнейшей критики, если кому интересно.

Автор - amur84
Дата добавления - 14.11.2012 в 02:07
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!