Страницы: 1
RSS
Как подождать открытия книги?
 
Доброго времени суток!!!
Обрабатываю много книг, думал открывать по очереди книгу,выполнять макрос и закрывать. В ручном режиме (если сидеть и держать кнопку F8 миллион раз) все получается. а если запустить автоматически, то книги не успевают открываться, а макрос уже выполняется. Как выйти из такой ситуации?  На ум только приходят ручные паузы или открытие всех книг сразу и потом уже обработка.
Изменено: Сергей Беляев - 16.02.2016 00:03:38
 
Цитата
Сергей Беляев написал: Как выйти из такой ситуации?
Показать код, и обрабатываемый файл (думаю они все однотипные).
Нет одного правильного решения, в каждом конкретном случае, что то работает лучше, что то хуже.
 
Цитата
думал открывать по очереди книгу,выполнять макрос и закрывать
Так и делайте. Все книги собрать в одну папку и командой Dir пройдитесь по всем файлам в папке.
В цикле открываете очередную книгу, выполняете макрос, закрываете книгу.
 
Цитата
Kuzmich написал: В цикле открываете очередную книгу, выполняете макрос, закрываете книгу.
Макрос начинает выполняться раньше чем открывается книга. Нужно что-то типа WaitOpenBook.
 
Нужно показать
 
Цитата
Сергей Беляев написал: Макрос начинает выполняться раньше чем открывается книга.
вот тут стало интересно. Покажите, не видел такого, даже представить не могу.
 
Код
 For Each file In coll                                                                                'коллекция книг

        name = Split(Split(file, "\")(UBound(Split(file, "\"))), ".")(0)                             'извлекаем только название книги
        i=i+1
        Call openfile                                                                                'открываем файл 

        lLastRow = Workbooks(name).Worksheets("Worksheet").Cells(Rows.Count, 1).End(xlUp).Row
            For j = 2 To lLastRow
                If word(Workbooks(name).Worksheets("Worksheet").Cells(j, 3), name) Then              ' проверяем если слово такое как название книги
                    sumcount = sumcount + 1
                    ThisWorkbook.Worksheets("Лист1").Cells(sumcount, 3) = Workbooks(name).Worksheets("Worksheet").Cells(j, 3)
                End If
            Next
        Workbooks(name).Close
 Next

Изменено: Сергей Беляев - 16.02.2016 01:02:24
 
Цитата
Hugo написал: вот тут стало интересно
Может из-за того, что я открываю книгу при помощи скрипта?
Код
Sub openfile()
                    Set Shell = CreateObject("Wscript.Shell")
                    Shell.Run (coll.Item(i))
End Sub
 
А зачем открывать скриптом? В общем случае вообще не факт что файл откроется в нужном приложении...
Изменено: Hugo - 16.02.2016 01:05:22
 
Не вижу что там в коллекции, но представим что полные имена файлов:
Код
    For Each file In coll                                                          'коллекция книг
        With Workbooks.Open(file)
            lLastRow = .Worksheets("Worksheet").Cells(.Worksheets("Worksheet").Rows.Count, 1).End(xlUp).Row
            For j = 2 To lLastRow
                If word(.Worksheets("Worksheet").Cells(j, 3), .Name) Then              ' проверяем если слово такое как название книги
                    sumcount = sumcount + 1
                    ThisWorkbook.Worksheets("Лист1").Cells(sumcount, 3) = .Worksheets("Worksheet").Cells(j, 3)
                End If
            Next
            .Close 0
        End With
    Next
Страницы: 1
Наверх