Страницы: 1
RSS
помогите пожалуйста исправить макрос для копирования строк, копируются не все строки с определенным значением
 
Доброе день, подскажите пожалуйста, использую следующий макрос Поиск строк.xlsm (см. вложение) для копирования строк из файлов, содержащих определенное значение, на отдельный лист, но макрос почему-то копирует не все строки, например, нужно, чтобы из вложенного файла "Отчет" (см. вложение), скопировались строки содержащие слово Yes, их в этом файле 10 штук, но копируется только 4 из них. Помогите мне, пожалуйста, в чем ошибка, как ее исправить? Заранее Вам спасибо.
 
программисты!  помогите пожалуйста - мне не к кому больше обратиться
 
все дело в волшебных пузырьках...
в столбце А у вас объединенные ячейки. именно из-за них (когда вы копируете всю строку) поиск перескакивает  нужные ячейки. уберите объединение и увидите.
Учимся сами и помогаем другим...
 
Цитата
iamzigmund пишет: помогите пожалуйста - мне не к кому больше обратиться
Всего час прошёл, а Вы уже в крик.
 
нет , убрал объединение ячеек со всего листа - все равно выводиться 4 строки а не 10
 
я прежде чем писать такое - проверил. У меня все копируется в полном объеме.
Учимся сами и помогаем другим...
 
убрал объединение ячеек это не решило вопрос, посмотрел Ваш файл: в нем значение строки в колонке Type Вы везде заполнили и это действительно помогло - работает. НО как можно преобразовать макрос, чтобы он копировал строки без этих дополнительных действий? тк файлов м.б. около 50-100 штук из которых надо скопировать ячейки и каждый раз открывать перед этим файлы и разъединять ячейки и протягивать значение из колонки Type в каждую пустую ячейку неудобно, Как можно сделать чтобы перед копирование строки из каждого файла, удалялся первый столбец и только потом происходил поиск и копировались бы ячейки в отдельный лист? Спасибо
 
Код
                        With iFoundSht
                            iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
                            If iLastRow = 1 Then iLastRow = 2
                            If iShtName <> iSheet.Name Then    'если новый файл
                                With .Cells(iLastRow + 2, 1)
                                    .Value = "Файл: " & iTempWB.Name & ", Лист: " & iSheet.Name
                                    .Font.Bold = True
                                End With
                            End If
                            
                            If iSheet.Cells(iFoundRng.Row, "A").MergeCells Then
                                Set mrgArea = iSheet.Cells(iFoundRng.Row, "A").MergeArea
                                mrgArea.UnMerge
                                mrgArea.Cells(1).Copy Destination:=mrgArea.Resize(mrgArea.Rows.Count - 1, 1).Offset(1)
                                
                                iFoundRng.EntireRow.Copy Destination:=.Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1)    'копируем всю строку
                                
                                mrgArea.Resize(mrgArea.Rows.Count - 1, 1).Offset(1).ClearContents
                                mrgArea.Merge
                            Else
                                iFoundRng.EntireRow.Copy Destination:=.Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1)    'копируем всю строку
                            End If
                            
                            iShtName = iSheet.Name
                        End With
Учимся сами и помогаем другим...
 
Заработало, подскажите пожалуйста, чтобы легче разобраться, к какой из модели относится полученная информация, как можно доработать макрос, чтобы перед каждой из вставленной из строкой, вставлялась ячейка с моделью (т.е. значение из ячейки F7) и ячейка с именем файла? Заранее Вам спасибо.
Изменено: iamzigmund - 02.07.2013 14:33:14
 
"...к какой из модели относится полученная информация..."
эту фразу совсем не понял  :)

Вообще этот макрос не вы писали разве?
Учимся сами и помогаем другим...
 
в каждом из открываемом файле заполнено значение в ячейке F7 (значение Style - номер модели), вот я хотел бы узнать как можно это значение вставить как дополнительную ячейку перед каждой из вставляемой строкой? Спасибо
 
раньше файл с макросом не должен был находиться в одной папке с обрабатываемыми данными - теперь может
Учимся сами и помогаем другим...
 
очень круто! спасибо, но почему-то у меня имя файла не вставляется в ячейку - вместо нее просто вставляется пустая ячейка, подскажите пожалуйста, как это можно исправить?
 
попробовал на другом файле - все работает Спасибо
 
Пожалуйста  :)
Учимся сами и помогаем другим...
 
ber$erk , начал я обрабатывать файл с помощью этого макроса, он корректно работает с файлами, которые открыты для редактирования, но большая часть из них залочена и соответсвенно, разъединять ячейки в них нельзя, при обработке таких файлов выходит ошибка 400,
НО это можно решить так, чтобы перед обработкой данных из таких файлов, листы с этих файлов копировать например в тот же файл Поиск строк.xlsm в какой-то вспомогательный лист,а потом только копировать из этого вспомогательного листа строки, после чего этот вспомогательный лист можно удалить. Файл выложил сюда (http://files.mail.ru/5573D438503D4F5AACD1A331557FCA12) тк он весит 900 кб. Помогите пож-та решить эту проблему. Заранее спасибо
Изменено: iamzigmund - 02.07.2013 17:21:18
 
"залочено" это "закрыто паролем от изменений"? Тогда копирование листа ничего не даст  ;) - пароль с листа это не снимет.
Мы пойдем другим путем
Учимся сами и помогаем другим...
 
ber$erk , да эти файлы залочены паролем от изменений, при срабатывании этого макроса выходят постоянно какие-то сообщения (см. файл Сообщения при срабатывании макроса), после того как маакрос скопировал все нужные строки на отдельный лист в нем появляются какие-то лишние строки (см. файл Непонятные строки) с чем это связано? и еще почему то перестало копироваться в столбец А значение из ячейки F7, как это можно исправить ? Заранее спасибо за помощь. Также выкладываю еще ссылки на несколько таких файлов, при обработки которых выходят эти ошибки:
http://files.mail.ru/255E07FD0CA94EA4B382C668F0B9BCC0
http://files.mail.ru/DED640305D32400C8501CFFAFD67CFE6
http://files.mail.ru/EA6FA6BA0FDE414B9E0FDB9ED82A1261
Изменено: iamzigmund - 03.07.2013 09:52:56
 
ну что тут скажешь? эти файлы запаролены, в них полно макросов, которые по всей видимости ведут журнал событий на листе. именно поэтому и появляются эти строки. Отключение событий книги ничего не дало. Зато больше не будут появляться разные окна.
Учимся сами и помогаем другим...
 
Спасибо, все равно у меня выходят эти окна при срабатывании макроса, но это ладно - буду нажимать ОК,
результат у меня выводится в таком виде (см. вложенный файл), чтобы убрать лишние данные можно ли отсортировать файл только по зеленым строкам? (я фильтрую - у меня все равно выводяться данные по всем строкам), Подскажите пожалуйста, можно ли добавить еще доп. столбец с копированием напротив каждой строки значение из ячейки M5:L5 (т.е чтобы видеть значение Created by в этих ячейках)?  Заранее спасибо
 
Ваши запросы переходят в стадию, когда надо переходить сюда. Все можно добавить (и доп.столбцы и доп.строки), но на этом форуме помогают, а не делают за вас.
Учимся сами и помогаем другим...
 
ber$erk , спасибо за помощь, со вставкой дополнительного столбца я сам разберусь, не могли бы Вы хотя бы   сказать, что делать, чтобы в результатах поиска исключить лишние строки на белом фоне (см. мой посл. вложенный файл Книга3), через фильтр у меня не получается их исключить (или захватывается не весь диапазон), что можно с этим сделать? Заранее спасибо
 
да - именно из-за того, что есть пустые строки, фильтр на захватывает весь диапазон.
замените код
Код
With .Cells(iLastRow + 2, 3)
    .Value = "Файл: " & iTempWB.Name & ", Лист: " & iSheet.Name
    .Font.Bold = True
End With

на
Код
With .Cells(iLastRow + 1, 3)
    .Value = "Файл: " & iTempWB.Name & ", Лист: " & iSheet.Name
    .Font.Bold = True
End With
Учимся сами и помогаем другим...
 
ber$erk ,спасибо большое за отзывчивость
Страницы: 1
Читают тему
Наверх