Здравствуйте, уважаемые форумчане!
Хочу всего лишь попросить совета.
Не так давно знакома с VBA, написала макрос себе в помощь, для обновления информации в прайсе, путем сравнения данных с двух листов по конкретной клонке и последующими операциями расчета и копирования с одного листа на другой. Одними формулами все необходимое сделать не получилось. Все вроде работает как нужно, но очень долго считает (более 30 минут).
Есть ли какие-то способы повысить производительность? Следует сказать, что уже использованы следующие приемы и, соответственно, их отмена в конце макроса:
в сравниваемых таблицах примерно по 3000 строк
Возможно, проблема в постоянном переключении между листами внутри цикла для копирования данных с одного листа на другой?
Возможно так и должно быть, т.к. объем данных достаточно большой и опреаций над ними производится много.
Прошу не высмеивать, это первое, что написано мной на VBA.
Заранее спасибо за ответы.
Хочу всего лишь попросить совета.
Не так давно знакома с VBA, написала макрос себе в помощь, для обновления информации в прайсе, путем сравнения данных с двух листов по конкретной клонке и последующими операциями расчета и копирования с одного листа на другой. Одними формулами все необходимое сделать не получилось. Все вроде работает как нужно, но очень долго считает (более 30 минут).
Есть ли какие-то способы повысить производительность? Следует сказать, что уже использованы следующие приемы и, соответственно, их отмена в конце макроса:
Код |
---|
Application.ScreenUpdating = False Application.EnableEvents = False If Workbooks.Count Then ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False End If |
Возможно, проблема в постоянном переключении между листами внутри цикла для копирования данных с одного листа на другой?
Код |
---|
ElseIf Name1 Like Name2 Then Worksheets("Лист1").Select Range(Cells(x + 1, 6), Cells(x + 1, 6)).Copy Worksheets("Export Products Sheet").Select Range(Cells(i + 1, 6), Cells(i + 1, 6)).PasteSpecial Cells(i + 1, 13) = "+" Else: Worksheets("Лист1").Select Range(Cells(x + 1, 1), Cells(x + 1, 57)).Copy Worksheets("Export Products Sheet").Select Range(Cells(LastRow + 1, 1), Cells(LastRow + 1, 57)).PasteSpecial |
Прошу не высмеивать, это первое, что написано мной на VBA.
Заранее спасибо за ответы.