Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
27 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 126

Скрытие строк на скрытом листе

07.03.2013, 09:51. Показов 1582. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код запускается из листа0.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Sub Generate()
    Dim ws0 As Worksheet
    Set ws0 = Worksheets("Лист0")
    
    Dim ws1 As Worksheet
    Set ws1 = Worksheets("Лист1")
 
    Dim rn As Range
    Set rn = ws1.Range("A1:Z100")
 
Application.ScreenUpdating = False
 
    With ws1
        
        .Visible = xlSheetVisible 
        .Activate
       
        ConditionalHide rn, "hide"
        ConditionalShow rn, "show"
        
        .PrintPreview
        .Visible = xlSheetHidden
    End With
 
Application.ScreenUpdating = True
End Sub
 
Sub ConditionalHide(ByVal rn As Range, ByVal searchFor As String)
    On Error GoTo 1
    Do
        rn.Find(searchFor, , xlValues, xlWhole, , , False, , False).EntireRow.Hidden = True
    Loop
1:
End Sub
 
Sub ConditionalShow(ByVal rn As Range, ByVal searchFor As String)
    Dim r As Range
    For Each r In rn.Rows
        If r.Hidden = True Then
            r.Hidden = False
            If r.Find(searchFor, , xlValues, xlWhole, , , False, , False) Is Nothing Then r.Hidden = True
        End If
    Next r
End Sub
Но значение "hide" и "show" находятся на скрытом листе1 в группированных столбцах. Он не видит эти значения. Если на листе эти значения разгруппировать, то макрос работает.

Как уйти от этой ошибки?

Может изменить xlValues на xlFormulas???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2013, 09:51
Ответы с готовыми решениями:

Предварительный просмотр на скрытом листе
Есть код: Sub test() Dim ws0 As Worksheet, ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet Set ws0 =...

Работа макроса на скрытом не активном листе
Добрый день, уважаемые. Такая проблема. Скажем есть макрос, который удаляет теги из ячеек. Sub DeleteTgRisk() Dim r As Range ...

Программное скрытие нулевых значений на листе Excel
Доброго дня, уважаемые коллеги! Сотворил генератор отчётов, использующий для вывода таблиц на печать Excel. Всё бы хорошо, но на...

4
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
07.03.2013, 19:53
Здравствуйте! Мой опыт работы с скрытыми листами.
1. Часто, чтоб не заморачиваться, все скрытые перевожу в видимые, но одновременно заганяю их названия в какой-то массив. Выполняю работу, и обратно - из массива наименований скрытых - все листы в скрытые.
2. При работе с группами -
Visual Basic
1
ActiveSheet.Rows(х).ShowDetail = True
- развернет всю группу, которая включает рад "х".
3.
Visual Basic
1
a = Rows(х).OutlineLevel
примет значение 1 или 2, если группа, в которую входит ряд "х" закрыта или открыта. Это еще можно записать выражением
Visual Basic
1
a = ActiveCell.EntireRow.OutlineLevel
. А также поможет выяснить, принадлежит ли ряд (ячейка) к какой-то группе.
4. С скрытыми рядами - недавно (день-два) здесь была развернута тема. Там все интересно, но очень хорошую идею подал Ikki, применив SpecialCells. Там формулы, но адаптировать не проблема.

Добавлено через 48 минут
Да, и еще я заметил. Может, просто чего не понимаю.
Вы определили какой-то диапазон r. Потом начинаете его перебирать
For Each r In rn.Rows
If r.Hidden = True Then
r.Hidden = False
А зачем? Ему достаточно сказать что-то на подобие:
ActiveSheet.r.EntireRow.Hidden = False
В обратную сторону тоже справедливо.
Ну и еще Вы ищете что-то через Find (это в ConditionalShow). Думаю, что так долго. Я бы собрал все нужное в каком-то диапазоне через Union (скорее всего он будет несмежный), и закрыл его одним махом.
0
2049 / 479 / 133
Регистрация: 13.11.2008
Сообщений: 918
08.03.2013, 09:27
Листы можно не отображать и работать прямо со скрытыми. Но т.к. Вы выводите на печать - вряд ли от этого можно уйти. А вот диапазоны...Find работает только с видимыми диапазонами. В подобном случае лучше использовать перебор массива - может даже быстрее будет:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub ConditionalHide(ByVal rn As Range, ByVal searchFor As String)
    Dim avArr, lr As Long, lc As Long
    avArr = rn.Value
    For lr = 1 To UBound(avArr, 1)
        For lc = 1 To UBound(avArr, 2)
            If avArr(lr, lc) = searchFor Then
                Rows(lr).Hidden = True
            End If
        Next lc
    Next lr
End Sub
я бы так сделал.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
08.03.2013, 11:30
Полностю согласен в Вами, The_Prist. Можна выкрутиться, есть инструменты. Но для меня самый главный вопрос - зачем скрывать строки в скрытых книгах? Как однажны меня очень развеселил "Казанский": "Вы кащееву смерть прячете?" Не проще одной строкой все открыть перед скрытием листа, например, Sheets().Cells.Hiden=False. Тогда и работать с скрытой книгой бутет проще. И реагировать на изменние условий тоже.
0
2049 / 479 / 133
Регистрация: 13.11.2008
Сообщений: 918
08.03.2013, 17:28
Igor_Tr, в принципе, да. Но сам сталкивался с ситуациями когда нужен был поиск по скрытым листам, в которых могли быть скрытые строки(например автофильтром). Это если с файлом и различными листами работают пользователи и скрываются листы в зависимости от их потребностей. И отображать все строки листа перед каждым скрытием не есть хорошо, т.к. если пользователь отобразит потом этот лист, то будет неприятно удивлен, что параметры его фильтрации чудесным образом исчезли...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.03.2013, 17:28
Помогаю со студенческими работами здесь

Скрытие строк
Доброго времени суток всем. Такой вопрос. Есть ли формула, макрос, которые позволяют автоматически скрывать строки, когда в определённом...

Скрытие ненужных строк
Приветствую! Недавно возник такой вопрос. Имеется например такой выбор из таблицы $result = mysql_query("SELECT * FROM table...

Скрытие строк в datagridview
Здравствуйте, появилась такая проблема, что я не могу скрыть строку в datagridview, если в нем не прописаны значения. Тема связана с...

Скрытие строк в DataGridView
Привет всем! Программирую на Visual Basic 2008. Есть некоторый набор данных DataSet1.xsd, в котором есть некоторая таблица. К этой...

Скрытие строк со значением ноль
Здравствуйте Есть макрос, при выполнении которого скрываются строки со значением 0 или пустые в столбце "A" Скрытие строк,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru