powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Занесение данных из массива
9 сообщений из 9, страница 1 из 1
Занесение данных из массива
    #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
Занесение данных из массива
    #35228879
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksBAVПри обработке этого кода (указан выше) программа зависает на 2-4 минуты. Т.е. он работает, все выводиться, причем через точку остановы и потом через F8 все проходит достаточно быстро.

Не верю. Не чему тут обрабатываться 4 минуты.
Для убыстрения.
Application.ScreenUpdating =False
Application.EnableEvents =False
Потом опять вкючить
...
Рейтинг: 0 / 0
Занесение данных из массива
    #35228892
AleksBAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за код, но не помогает.
Я уже поставил код перед обработкой данного кода.
сначала Worksheets("Отчет1").Cells(2, 3).Value = Time
перед самой обработкой:
Worksheets("Отчет1").Cells(2, 4).Value = Time
время составляет 2 секунды, а потом зависон.
...
Рейтинг: 0 / 0
Занесение данных из массива
    #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
Занесение данных из массива
    #35228935
AleksBAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за код, красивее, но все равно не работает.
а через точку остановы и F8 - летает.
...
Рейтинг: 0 / 0
Занесение данных из массива
    #35228987
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приложите файл.
...
Рейтинг: 0 / 0
Занесение данных из массива
    #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
Занесение данных из массива
    #35229022
AleksBAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странная особенность, решил прислать пример, начал чистить файл до нужного размера, в итоге остались 2 листа Отчет1 и Поставщики, после этого запустил обработку, которая прошла за 2 секунды, вот теперь вопрос, почему?
...
Рейтинг: 0 / 0
Занесение данных из массива
    #35233508
XNut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимые ячейки Активного листа обрабатываются медленнее невидимых или на неактивном листе

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


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