Всем хорошего вечера, вопрос в принципе весь отражён в названии темы… только добавлю что - макросом) Че то покопался на форумах и чтоб и то и то удалять , не нашел
Всем хорошего вечера, вопрос в принципе весь отражён в названии темы… только добавлю что - макросом) Че то покопался на форумах и чтоб и то и то удалять , не нашелGjlhzl
За основу можно взять мой код отсюда. Фактически там надо подправить одну строку в цикле удаления строк и одну строку в цикле удаления столбцов - собственно, где условие отбора и последующее удаление в одной строке кода. Так вот, надо условие отбора пустых строк/столбцов заменить на условие отбора скрытых. Проверять скрытость либо по свойству Hidden = True, либо по Height/Width = 0 соответственно.
За основу можно взять мой код отсюда. Фактически там надо подправить одну строку в цикле удаления строк и одну строку в цикле удаления столбцов - собственно, где условие отбора и последующее удаление в одной строке кода. Так вот, надо условие отбора пустых строк/столбцов заменить на условие отбора скрытых. Проверять скрытость либо по свойству Hidden = True, либо по Height/Width = 0 соответственно.Gustav
[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] правда не разберусь
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
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 подсвечивает
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
Сообщение отредактировал Gjlhzl - Пятница, 10.11.2023, 18:32
почему макрос работает только если он есть в модуле книги в которой нужно удалить
Потому что есть такая строка: [vba]
Код
For Each wks In ThisWorkbook.Worksheets
[/vba] ThisWorkbook - это ссылка на книгу, в которой выполняется код VBA. Вы же раньше ничего не говорили о том, что хотите во многих книгах сразу использовать - я и не заботился об этом особо. Попробуйте заменить на ActiveWorkbook, т.е. вот такую строку сделайте: [vba]
Код
For Each wks In ActiveWorkbook.Worksheets
[/vba] Если не поможет, будем дальше код исправлять.
почему макрос работает только если он есть в модуле книги в которой нужно удалить
Потому что есть такая строка: [vba]
Код
For Each wks In ThisWorkbook.Worksheets
[/vba] ThisWorkbook - это ссылка на книгу, в которой выполняется код VBA. Вы же раньше ничего не говорили о том, что хотите во многих книгах сразу использовать - я и не заботился об этом особо. Попробуйте заменить на ActiveWorkbook, т.е. вот такую строку сделайте: [vba]
Код
For Each wks In ActiveWorkbook.Worksheets
[/vba] Если не поможет, будем дальше код исправлять.Gustav