:: Не фоксом единым
Снова про ускорение добавления строк в Excel
boba
Автор

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Не так давно тут спрашивал про добавление
строк в ексел быстро
Дали хороший совет, и он работает

Lparameters lexx,lcobb, lnstartx, lnstarty, lnendx, lnendy, lnrow
If Type('lcobb') = 'O'
lcobb.Activate()
lexx.Range(lexx.cells(lnstartx, lnstarty),lexx.cells(lnendx, lnendy)).Select
* lexx.Range(lcobb.cells(lnstartx, lnstarty),lcobb.cells(lnendx, lnendy)).Select
Else
lexx.Range(lexx.cells(lnstartx, lnstarty),lexx.cells(lnendx, lnendy)).Select
Endif
With lexx.Selection
.Resize(lnrow, 1).EntireRow.Insert()
ENDWITH
*******************************************

Речь идет о добавлении строк в готовые шаблоны
Есть более сложный шаблон,
Где есть в ячейках формулы с вычислением промежуточный итогов, , ячейки с формулами проверки введенных значений. Часть ячеек окрашены, часть Readonly
Таких эталонных строк 5-10. А при заполнении реальной отчетности могут быть сотни или тысячи
Те нужно хитрое тиражирование новых строк по образцу имеющихся строк
Ниже код, который выбран из макроса Ексел, который это делает, и работает на практике несколько лет.
Но при большом числе строк он начинает тормозить.
Нет ли способа ускорения по примеру выше?

Перед вызовом должна быть активирована рабочая страница
lopage.activate
lnrows число добавляемых строк.

EXLS.activesheet.Protect("tesla",,,,,,,,.T.)

EXLS.activesheet.Unprotect("masha")
For counter = 1 To lnrows


lastrow = EXLS.Cells(EXLS.Cells.Rows.Count, "A").End(-4162).Row
EXLS.Rows(lastrow).AutoFill(EXLS.Rows(lastrow).Resize(2), 0)
If Type('EXLS.Rows(lastrow + 1).SpecialCells(2)') = 'O'
EXLS.Rows(lastrow + 1).SpecialCells(2).ClearContents
Endif

EXLS.Rows(lastrow + 1).SpecialCells(4).Item(1).Activate
EXLS.Rows(lastrow - 1).Select
EXLS.Selection.Copy
EXLS.Rows(lastrow).Select
EXLS.Selection.PasteSpecial(-4122, -4142, .F., .F.)
EXLS.Application.CutCopyMode = .F.

Endfor
EXLS.activesheet.Protect("masha",,,,,,,,.F.,,,,.T.)



Исправлено 1 раз(а). Последнее : boba, 23.06.17 10:21
Ratings: 0 negative/0 positive
Re: Снова про ускорение добавления строк в Excel
Владимир Максимов

Сообщений: 14095
Откуда: Москва
Дата регистрации: 02.09.2000
Копирование форматов? Я делал цикл с удвоением. Код не приведу, но общий смысл такой

0. Есть образцовая строка шаблона Excel
1. Определяем общее количество строк, в которые надо скопировать формат
2. Организуем цикл с удвоением копируемых строк

- Выделяем образцовую строку
- Копируем одну строку
- Выделяем 2 строки (образцовую, и только что созданную)
- Копируем 2 строки
- Выделяем 4 строки (все созданные с образцовым форматом)
- Копируем 4 строки
(...)
- Выделаем количество строк, равное остатку (из тех, которые имеют нужный формат)
- Копируем оставшееся количество строк

Это, разумеется, если строки идут без разрывов
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 10 (Гостей: 10)

© 2000-2024 Fox Club 
Яндекс.Метрика