Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2012, 14:53   #1
St007
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 16
По умолчанию Скрыть строки

Добрый день, подскажите как сделать чтобы при совпадении имен скрывались строки.

к примеру: если в ячейки B1 содержится текст: январь, то скрылись те строчки, где в столбце A в ячейках есть январь

ячейка B1 отвечает за скрытие строк столбца A, при совпадении имен
ячейка С1 отвечает за скрытие строк в столбце D, при совпадении имен.

На данном форуме, нашел как реализовать данные условия для одной ячейки и одного столбца

Option Explicit
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B1" Then
Application.ScreenUpdating = False
Rows("5:907").Hidden = False
Dim poz As Range
For Each poz In Range("A8:A907").Cells
If poz.Value = Target.Value Then poz.EntireRow.Hidden = True
Next poz
End If
End Sub

но добавить сюда же подобный функционал с ячейкой С1 и столбцом D не получается
St007 вне форума Ответить с цитированием
Старый 04.04.2012, 00:42   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Так, наверно:
Код:
Option Explicit
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B1" Then
Application.ScreenUpdating = False
Rows("5:907").Hidden = False
Dim poz As Range
For Each poz In Range("A8:A907").Cells
If poz.Value = Target.Value Then poz.EntireRow.Hidden = True
Next poz
Exit Sub
End If
If Target.Address(0, 0) = "C1" Then
Application.ScreenUpdating = False
Rows("5:907").Hidden = False
Dim poz As Range
For Each poz In Range("D8:D907").Cells
If poz.Value = Target.Value Then poz.EntireRow.Hidden = True
Next poz
End If
End Sub
motorway вне форума Ответить с цитированием
Старый 05.04.2012, 21:33   #3
St007
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 16
По умолчанию

вылетает ошибка:
Compile error:
Duplicate declaration in current scope

выделяет желтым строчку:
Sub Worksheet_Change(ByVal Target As Range) (2ая строка)
и
Dim poz As Range (15 ая строка)

Последний раз редактировалось St007; 05.04.2012 в 21:44.
St007 вне форума Ответить с цитированием
Старый 05.04.2012, 21:45   #4
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Дубликаты однако.
Вы первый свой макрос заремили?
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 06.04.2012, 02:59   #5
St007
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 16
По умолчанию

VictorM воспользовался кодом, который предложил motorway, при тесте макроса вылетела ошибка, описанная мною выше((

а как его заремить?
St007 вне форума Ответить с цитированием
Старый 06.04.2012, 03:21   #6
St007
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 16
По умолчанию

пример.rar______
St007 вне форума Ответить с цитированием
Старый 06.04.2012, 07:47   #7
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Немного не то, недоглядел.
Поскольку автор кода молчит, позволю себе немного изменить.
Попробуйте так:
Код:
Option Explicit
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "B1" Then
        Application.ScreenUpdating = False
        Rows("5:907").Hidden = False
        Dim poz As Range
        For Each poz In Range("A2:A20").Cells
            If poz.Value = Target.Value Then poz.EntireRow.Hidden = True
        Next poz
        Exit Sub
    End If
    If Target.Address(0, 0) = "C1" Then
        Application.ScreenUpdating = False
        Rows("2:20").Hidden = False
        Dim poz1 As Range
        For Each poz1 In Range("D2:D20").Cells
            If poz1.Value = Target.Value Then poz1.EntireRow.Hidden = True
        Next poz1
    End If
End Sub
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 06.04.2012, 12:44   #8
St007
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 16
По умолчанию

заработал без ошибок, только не совсем так как нужно

1) ввожу инфу в ячейку B1, строки при совпадении с ячейками в столбце A скрываются.
2)ввожу инфу в ячейку C1, скрываются в столбце D, но скрытые строки в столбце A, которые были скрыты в 1ом действии отображается.


как сделать так, чтобы:

ячейка B1 отвечала только за столбец A(отображение и скрытие строк),

ячейка C1 только за столбец D(отображение и скрытие строк).
St007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрыть ненужные строки Dsn Microsoft Office Excel 4 06.06.2011 10:04
Скрыть строки в файле excel SergeiK Microsoft Office Excel 2 27.04.2011 21:31
Как в комбобоксе скрыть ненужные строки. voverrr Общие вопросы Delphi 8 08.03.2011 18:03
Как в VBA скрыть неиспользуемые строки при условии berliozz Microsoft Office Excel 16 24.11.2008 08:47
Как частично скрыть строки таблицы... krupnoff PHP 11 21.08.2007 23:49