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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2010, 10:05   #11
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Макрос, удаляющий строки активного листа, в которых есть хотя бы 1 пустая ячейка:
Код:
Sub DelRows()
    Application.ScreenUpdating = False: On Error Resume Next
    ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 24.02.2010 в 10:07.
SAS888 вне форума Ответить с цитированием
Старый 24.02.2010, 10:15   #12
as-is
Пользователь
 
Регистрация: 09.02.2010
Сообщений: 41
По умолчанию

""А зачем иметь кучу листов, да еще и с кучей макросов? Не проще ли иметь один макрос, который запускается по событию книги Workbook_NewSheet(ByVal Sh As Object). Т.е. при каждом добавлении нового листа.""
Спасибо за ""Workbook_NewSheet(ByVal Sh As Object)"". Если бы я знал, как это приспособить.
---------------------------------------------------------------------
***здесь позволю себе пофилософствовать - я выбрал себе путь обучения через форум, - получаю ответы и пробую хоть что-то понять в структуре макросов. Иногда получается. Написать свои макросы - пока не способен. Поэтому не устану говорить спасибо за ответы.
---------------------------------------------------------------------

Много листов определяется количеством файлов, которые необходимо обработать и мне проще не смешивать их. Внутри каждого тысячи строк, например. Тогда я уж точно запутаюсь. Моя логика примитивна - каждый день я автоматически измеряю или получаю или прочее 10-20 файлов (беру с большим запасом). Загоняю их в одну книгу, обрабатываю, сохраняю = каждый непустой день всего один объединённый файл.
Насчет того, что много макросов, то их всего:
1. макрос открытия вставки-комбинирования = один;
2. макрос удаления ненужных строк = один;
3. макрос сравнения колонок, диаграмм и прочее -сейчас не принципиально;
4. сохранение-вывод на печать = один -сейчас не принципиально
as-is вне форума Ответить с цитированием
Старый 24.02.2010, 11:46   #13
as-is
Пользователь
 
Регистрация: 09.02.2010
Сообщений: 41
По умолчанию

ВОПРОС. Уважаемый SAS888, спасибо за код. Почти разобрался. Еще один мой глупый вопрос: как сделать, чтобы код
-----------------------------------------------
Sub DelRows()
Application.ScreenUpdating = False: On Error Resume Next
ActiveSheet.UsedRange.SpecialCells( xlCellTypeBlanks).EntireRow.Delete
End Sub
-------------------------------------------------
удалял строку при условии пустой ячейки, но при этом в некоторых других ячейках этой строки есть текст и численные значения (формально любого формата).
Указанный Вами код удаляет, но не в моем случае ("текст в ячейке").
Создаю новую книгу, вставляю все, что можно = все работает.
Где я ошибаюсь. Может проблема в том, что листы именованы.
as-is вне форума Ответить с цитированием
Старый 24.02.2010, 11:50   #14
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
чтобы код удалял строку при условии пустой ячейки, но при этом в некоторых других ячейках этой строки есть текст и численные значения (формально любого формата).
Не понял. Объясните по-медленнее. Лучше с примером.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 24.02.2010, 12:17   #15
as-is
Пользователь
 
Регистрация: 09.02.2010
Сообщений: 41
По умолчанию

Сам не понимаю. Беру свой созданный файл - все работает; беру чужой - ничего. Макрос чувствителен к защите файла (глупость наверное).
Из файла, в котором не получается добиться результата копирую данные и вставляю в новый файл - снова все ОК. Мистика.
Вложения
Тип файла: rar пример.rar (7.8 Кб, 25 просмотров)
as-is вне форума Ответить с цитированием
Старый 25.02.2010, 08:56   #16
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Ваша задача немного сложнее, чем кажется. Т.к. Вам требуется
Цитата:
я удаляю не только пустые строки, но и строки в которых есть хотя бы одна пустая ячейка
то сложность в том, где границы контролируемого диапазона. Т.к. в приложенном Вами файле есть пустые ячейки, содержащие формат, то определение рабочего диапазона как с помощью UsedRange, так и с помощью SpecialCells(xlCellTypeLastCell) приведет к ошибочному результату. Т.е. если мы, например, будем рассматривать диапазон, содержащий пустой (лишний) столбец, то все строки будут удалены (ведь по условию, раз в каждой строке есть хотя бы одна пустая ячейка - то строка удаляется).
Поэтому, сначала нужно определить последний заполненный столбец, а уже затем проверять на пустоту строку от 1-го до определенного нами столбца. Т.е. без цикла не обойтись. Постаравшись организовать наиболее оптимальный (минимальный) цикл, у меня получился следующий код:
Код:
Sub DelRows()
    Dim i As Long: Application.ScreenUpdating = False
    For i = Cells.SpecialCells(xlCellTypeLastCell).Column To 1 Step -1
        If Columns(i).Text = "" Then Else Exit For
    Next
    Range([A1], Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, i)) _
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Пример файла во вложении.
Вложения
Тип файла: rar пример_2.rar (6.8 Кб, 31 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 26.02.2010, 07:17   #17
as-is
Пользователь
 
Регистрация: 09.02.2010
Сообщений: 41
По умолчанию

Спасибо за науку и прилагаемый файл.
as-is вне форума Ответить с цитированием
Старый 17.12.2018, 22:37   #18
skapitan
 
Регистрация: 18.03.2010
Сообщений: 8
По умолчанию

есть макрос который собирает несколько листов из разных файлов в одну книгу. почему-то иногда собирает все файлы, а иногда только первый.

помогите, пожалуйста, чтобы собирал не только XLS, но и CSV + XLXM etc

Код:
Sub CombineWorkbooks()
'ctrl+shift+W
Dim FilesToOpen
Dim x As Integer
On Error GoTo ErrHandler
Application.ScreenUpdating = False
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="Microsoft Excel Files (*.xls), *.xls", _
MultiSelect:=True, Title:="Files to Merge")
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "no files selected"
GoTo ExitHandler
End If
x = 1
While x <= UBound(FilesToOpen)
Workbooks.Open Filename:=FilesToOpen(x)
Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
x = x + 1
Wend
ExitHandler:
Application.ScreenUpdating = True
Exit Sub
ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub
_____
Код программы нужно выделять (форматировать) тегами [CODE] [/CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 18.12.2018 в 07:45.
skapitan вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос постоянно обрабатывает события. При открытии другой книги макрос обрывается. Ples Microsoft Office Excel 8 17.12.2016 18:15
Измение гиперссылок на листы книги при переименовании файла Aswerd Microsoft Office Excel 0 18.02.2010 01:26
excel+vba странности взаимодействия при сохранении книги без макросов alvazor Microsoft Office Excel 7 06.07.2009 17:22
Выбор файлов для импорта. Sorro Microsoft Office Excel 8 06.05.2009 12:16
При закрытии книги, удаляются листы Romuald Microsoft Office Excel 3 20.01.2009 21:34