Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Занесение данных из массива / 9 сообщений из 9, страница 1 из 1
02.04.2008, 09:26
    #35228865
AleksBAV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных из массива
Доброго времени суток, уважаемые!
есть код:
maxpost=30 'например, кол-во поставщиков равно 30
For i = 0 To maxpost
Worksheets("Поставщики").Cells(i+1, 1).Value = a(i)
If a(i) <> "" Then
Worksheets("Поставщики").Cells(i+1, 2).Value = 1
Worksheets("Поставщики").Cells(i+1, 3).Value = 1
End If
Next i

a(i) - есть некий массив, в котором занесены данные
"Поставщики" - лист, в котором находиться список поставщиков.
на момент обработки активным является лист "Отчет1"

Вопрос:
Есть обработка, которая обрабатывает более 1000 записей, выбирает поставщиков, сравнивает с "Поставщики" удаляет лишнее, сортирует список и убирает в массиве пустые строки. Все это занимает 2 секунды. При обработке этого кода (указан выше) программа зависает на 2-4 минуты. Т.е. он работает, все выводиться, причем через точку остановы и потом через F8 все проходит достаточно быстро.
Объясните пожалуйста, почему и как оптимизировать.
Заранее большое спасибо.
...
Рейтинг: 0 / 0
02.04.2008, 09:29
    #35228879
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных из массива
AleksBAVПри обработке этого кода (указан выше) программа зависает на 2-4 минуты. Т.е. он работает, все выводиться, причем через точку остановы и потом через F8 все проходит достаточно быстро.

Не верю. Не чему тут обрабатываться 4 минуты.
Для убыстрения.
Application.ScreenUpdating =False
Application.EnableEvents =False
Потом опять вкючить
...
Рейтинг: 0 / 0
02.04.2008, 09:35
    #35228892
AleksBAV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных из массива
Спасибо за код, но не помогает.
Я уже поставил код перед обработкой данного кода.
сначала Worksheets("Отчет1").Cells(2, 3).Value = Time
перед самой обработкой:
Worksheets("Отчет1").Cells(2, 4).Value = Time
время составляет 2 секунды, а потом зависон.
...
Рейтинг: 0 / 0
02.04.2008, 09:47
    #35228919
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных из массива
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
maxpost= 30  'например, кол-во поставщиков равно 30
With Worksheets("Поставщики")
    For i =  1  To maxpost -  1 
        .Cells(i,  1 ).Value = a(i- 1 )
        If a(i- 1 ) <> "" Then
            .Cells(i,  2 ).Value =  1 
            .Cells(i,  3 ).Value =  1 
        End If
    Next i
End With
Так будет быстрее, но по идее не намного. По идее там действительно нечему обрабатываться 4 минуты.
...
Рейтинг: 0 / 0
02.04.2008, 09:58
    #35228935
AleksBAV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных из массива
Спасибо за код, красивее, но все равно не работает.
а через точку остановы и F8 - летает.
...
Рейтинг: 0 / 0
02.04.2008, 10:15
    #35228987
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных из массива
Приложите файл.
...
Рейтинг: 0 / 0
02.04.2008, 10:18
    #35228995
AleksBAV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных из массива
maxpost=30 'например, кол-во поставщиков равно 30
With Worksheets("Поставщики")
For i = 1 To maxpost - 1
.Cells(i, 1).Value = a(i-1)
If a(i-1) <> "" Then
.Cells(i, 2).Value = 1
.Cells(i, 3).Value = 1
End If
Next i
End With

если взять Ваш код и поставить:

Sheets("Поставщики").Select
maxpost=30 'например, кол-во поставщиков равно 30

For i = 1 To maxpost - 1
Cells(i, 1).Value = a(i-1)
If a(i-1) <> "" Then
Cells(i, 2).Value = 1
Cells(i, 3).Value = 1
End If
Next i
то весь код обрабатывается 3 секунды, но записи заносятся в текущий (отчет1) лист.
...
Рейтинг: 0 / 0
02.04.2008, 10:25
    #35229022
AleksBAV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных из массива
Странная особенность, решил прислать пример, начал чистить файл до нужного размера, в итоге остались 2 листа Отчет1 и Поставщики, после этого запустил обработку, которая прошла за 2 секунды, вот теперь вопрос, почему?
...
Рейтинг: 0 / 0
03.04.2008, 16:17
    #35233508
XNut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных из массива
Видимые ячейки Активного листа обрабатываются медленнее невидимых или на неактивном листе

Ещё вариант -- отключать пересчет на время выполнения скрипта
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Занесение данных из массива / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]