В общем есть сформированный функциями отчет в эксель.
Есть желание подбить итоги которые в эксель вызываются по меню "Данные - итоги".
Подобных функций не нашел и решил оформить это макросом.
Но по скольку заранее не знаю какое кол-во строк в отчёте будет - то и макрос соответственно не постоянен и должен формироваться на ходу.
Вопрос: есть ли возможность не загружать макрос из файла или запускать уже описанный в шаблоне а напрямую из ВИПа командами передать построчно макрос и выполнить его?
Макросы в функциях эксель
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 222
- Зарегистрирован: 04 июн 2008, 14:35
- Откуда: Стерлитамак
- Контактная информация:
Re: Макросы в функциях эксель
Давно не писал макросов, но помнится есть там возможность определить границу ареала данных т.е. где ж они кончаются на листе.Алексей писал(а): Но по скольку заранее не знаю какое кол-во строк в отчёте будет
-
- Местный житель
- Сообщения: 1846
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Макросы в функциях эксель
Определить можно с помощью GetUsedRange, но это когда уже выгружены данные..ilshat писал(а):Давно не писал макросов, но помнится есть там возможность определить границу ареала данных т.е. где ж они кончаются на листе.Алексей писал(а): Но по скольку заранее не знаю какое кол-во строк в отчёте будет
Для справки. Может поможет 
Большинство xl-функций в случае некорректного указания границ используют GetUserRange для определения границ. Пример:

Большинство xl-функций в случае некорректного указания границ используют GetUserRange для определения границ. Пример:
Код: Выделить всё
function tExporter.InsertRange;
begin
Result := false;
if (not IsAllValid) then Exit;
try
if (RowU<=0) or (ColL<=0) or (RowD<=0) or (ColR<=0) then
WSheet.UsedRange.Insert(Shift := lShift)
else
WSheet.Range[WSheet.Cells[RowU, ColL], WSheet.Cells[RowD, ColR]].Insert(Shift := lShift);
LastError := cgxlOk; Result := True;
except
LogOnExcept('InsertRange');
LastError := cgxlErrInsertRange;
end
end;