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

Вход

Регистрация

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

 

= Мир MS Excel/Удалить скрытые столбцы и строки на всех листах - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Удалить скрытые столбцы и строки на всех листах
Gjlhzl Дата: Среда, 08.11.2023, 20:24 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 138
Репутация: 0 ±
Замечаний: 0% ±

Всем хорошего вечера, вопрос в принципе весь отражён в названии темы… только добавлю что - макросом)
Че то покопался на форумах и чтоб и то и то удалять , не нашел
 
Ответить
СообщениеВсем хорошего вечера, вопрос в принципе весь отражён в названии темы… только добавлю что - макросом)
Че то покопался на форумах и чтоб и то и то удалять , не нашел

Автор - Gjlhzl
Дата добавления - 08.11.2023 в 20:24
Gustav Дата: Среда, 08.11.2023, 22:30 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
За основу можно взять мой код отсюда. Фактически там надо подправить одну строку в цикле удаления строк и одну строку в цикле удаления столбцов - собственно, где условие отбора и последующее удаление в одной строке кода. Так вот, надо условие отбора пустых строк/столбцов заменить на условие отбора скрытых. Проверять скрытость либо по свойству Hidden = True, либо по Height/Width = 0 соответственно.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Среда, 08.11.2023, 22:35
 
Ответить
СообщениеЗа основу можно взять мой код отсюда. Фактически там надо подправить одну строку в цикле удаления строк и одну строку в цикле удаления столбцов - собственно, где условие отбора и последующее удаление в одной строке кода. Так вот, надо условие отбора пустых строк/столбцов заменить на условие отбора скрытых. Проверять скрытость либо по свойству Hidden = True, либо по Height/Width = 0 соответственно.

Автор - Gustav
Дата добавления - 08.11.2023 в 22:30
Gjlhzl Дата: Среда, 08.11.2023, 22:34 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 138
Репутация: 0 ±
Замечаний: 0% ±

Gustav, спасибо попробую…все методом научного тыка))
 
Ответить
СообщениеGustav, спасибо попробую…все методом научного тыка))

Автор - Gjlhzl
Дата добавления - 08.11.2023 в 22:34
Gjlhzl Дата: Среда, 08.11.2023, 22:54 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 138
Репутация: 0 ±
Замечаний: 0% ±

Gustav,
вот в этих строчках?
[vba]
Код
[vba][code]        If wf.CountA(wks.UsedRange.Rows(i - iMin + 1)) = 0 Then wks.Rows(i).Delete
                If wf.CountA(wks.UsedRange.Columns(i - iMin + 1)) = 0 Then wks.Columns(i).Delete
[/vba]

попробовал вот так - не пашет)) грамматики не знаю
[vba]
Код
        If wf.Hidden(wks.UsedRange.Rows(i - iMin + 1)) = True Then wks.Rows(i).Delete
        If wf.Hidden(wks.UsedRange.Columns(i - iMin + 1)) = True Then wks.Columns(i).Delete
[/vba]
правда не разберусь


Сообщение отредактировал Gjlhzl - Среда, 08.11.2023, 22:55
 
Ответить
СообщениеGustav,
вот в этих строчках?
[vba]
Код
[vba][code]        If wf.CountA(wks.UsedRange.Rows(i - iMin + 1)) = 0 Then wks.Rows(i).Delete
                If wf.CountA(wks.UsedRange.Columns(i - iMin + 1)) = 0 Then wks.Columns(i).Delete
[/vba]

попробовал вот так - не пашет)) грамматики не знаю
[vba]
Код
        If wf.Hidden(wks.UsedRange.Rows(i - iMin + 1)) = True Then wks.Rows(i).Delete
        If wf.Hidden(wks.UsedRange.Columns(i - iMin + 1)) = True Then wks.Columns(i).Delete
[/vba]
правда не разберусь

Автор - Gjlhzl
Дата добавления - 08.11.2023 в 22:54
Gustav Дата: Среда, 08.11.2023, 23:46 | Сообщение № 5
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
попробовал вот так - не пашет

Не туда Hidden приставляли, надо матчасть подучить. Вот так надо:
[vba]
Код

If wks.Rows(i).Hidden Then wks.Rows(i).Delete

If wks.Columns(i).Hidden Then wks.Columns(i).Delete
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
попробовал вот так - не пашет

Не туда Hidden приставляли, надо матчасть подучить. Вот так надо:
[vba]
Код

If wks.Rows(i).Hidden Then wks.Rows(i).Delete

If wks.Columns(i).Hidden Then wks.Columns(i).Delete
[/vba]

Автор - Gustav
Дата добавления - 08.11.2023 в 23:46
Gjlhzl Дата: Четверг, 09.11.2023, 05:05 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 138
Репутация: 0 ±
Замечаний: 0% ±

Gustav, спасибо!
 
Ответить
СообщениеGustav, спасибо!

Автор - Gjlhzl
Дата добавления - 09.11.2023 в 05:05
Gjlhzl Дата: Пятница, 10.11.2023, 18:31 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 138
Репутация: 0 ±
Замечаний: 0% ±

Gustav, А подскажите еще...почему макрос работает только если он есть в модуле книги в которой нужно удалить...просто книги открываются макросом потом хочу в них удалить скрытые и пустые строки столбцы..
[vba]
Код
Sub mF()
    Dim arrFILES(), i&
    arrFILES = Application.GetOpenFilename _
    (" (*.xlsx),*.xlsx", , "Open all the necessary files", , True)
    For i = LBound(arrFILES) To UBound(arrFILES)
        Workbooks.Open arrFILES(i)
        Call Удаление_скрытых_и_пустых_строк_и_столбцов_на_всех_листах
    Next 'i
End Sub
[/vba]
при таком раскладе книга открывается и выдает ошибку - 1004 не удалось переместить объекты за пределы листа...и подсвечивает строку
[vba]
Код
If wf.Hidden(wks.UsedRange.Columns(i - iMin + 1)) = True Then wks.Columns(i).Delete
[/vba]

конец строки - wks.Columns(i).Delete подсвечивает


Сообщение отредактировал Gjlhzl - Пятница, 10.11.2023, 18:32
 
Ответить
СообщениеGustav, А подскажите еще...почему макрос работает только если он есть в модуле книги в которой нужно удалить...просто книги открываются макросом потом хочу в них удалить скрытые и пустые строки столбцы..
[vba]
Код
Sub mF()
    Dim arrFILES(), i&
    arrFILES = Application.GetOpenFilename _
    (" (*.xlsx),*.xlsx", , "Open all the necessary files", , True)
    For i = LBound(arrFILES) To UBound(arrFILES)
        Workbooks.Open arrFILES(i)
        Call Удаление_скрытых_и_пустых_строк_и_столбцов_на_всех_листах
    Next 'i
End Sub
[/vba]
при таком раскладе книга открывается и выдает ошибку - 1004 не удалось переместить объекты за пределы листа...и подсвечивает строку
[vba]
Код
If wf.Hidden(wks.UsedRange.Columns(i - iMin + 1)) = True Then wks.Columns(i).Delete
[/vba]

конец строки - wks.Columns(i).Delete подсвечивает

Автор - Gjlhzl
Дата добавления - 10.11.2023 в 18:31
Gustav Дата: Пятница, 10.11.2023, 18:45 | Сообщение № 8
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
If wf.Hidden(wks.UsedRange.Columns(i - iMin + 1)) = True Then wks.Columns(i).Delete

А что это за строка у вас?! Мы же ее три сообщения назад поменяли на:
[vba]
Код
If wks.Columns(i).Hidden Then wks.Columns(i).Delete
[/vba]
Сейчас какой год? А время года? ;)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
If wf.Hidden(wks.UsedRange.Columns(i - iMin + 1)) = True Then wks.Columns(i).Delete

А что это за строка у вас?! Мы же ее три сообщения назад поменяли на:
[vba]
Код
If wks.Columns(i).Hidden Then wks.Columns(i).Delete
[/vba]
Сейчас какой год? А время года? ;)

Автор - Gustav
Дата добавления - 10.11.2023 в 18:45
Gustav Дата: Пятница, 10.11.2023, 18:56 | Сообщение № 9
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
почему макрос работает только если он есть в модуле книги в которой нужно удалить

Потому что есть такая строка:
[vba]
Код
For Each wks In ThisWorkbook.Worksheets
[/vba]
ThisWorkbook - это ссылка на книгу, в которой выполняется код VBA. Вы же раньше ничего не говорили о том, что хотите во многих книгах сразу использовать - я и не заботился об этом особо. Попробуйте заменить на ActiveWorkbook, т.е. вот такую строку сделайте:
[vba]
Код
For Each wks In ActiveWorkbook.Worksheets
[/vba]
Если не поможет, будем дальше код исправлять.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
почему макрос работает только если он есть в модуле книги в которой нужно удалить

Потому что есть такая строка:
[vba]
Код
For Each wks In ThisWorkbook.Worksheets
[/vba]
ThisWorkbook - это ссылка на книгу, в которой выполняется код VBA. Вы же раньше ничего не говорили о том, что хотите во многих книгах сразу использовать - я и не заботился об этом особо. Попробуйте заменить на ActiveWorkbook, т.е. вот такую строку сделайте:
[vba]
Код
For Each wks In ActiveWorkbook.Worksheets
[/vba]
Если не поможет, будем дальше код исправлять.

Автор - Gustav
Дата добавления - 10.11.2023 в 18:56
Gjlhzl Дата: Пятница, 10.11.2023, 19:21 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 138
Репутация: 0 ±
Замечаний: 0% ±

Gustav, извиняюсь...случайно старую версию файла открыл:))
и за последнюю подсказку спасибо!
 
Ответить
СообщениеGustav, извиняюсь...случайно старую версию файла открыл:))
и за последнюю подсказку спасибо!

Автор - Gjlhzl
Дата добавления - 10.11.2023 в 19:21
  • Страница 1 из 1
  • 1
Поиск:

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