Страница 2 из 2

Добавлено: 20 ноя 2007, 12:12
hope
Понятно, Edward!

А последовательность действий правильная?

Добавлено: 20 ноя 2007, 12:19
edward_K
да. тока в конце еще не мешает сохранить в out. И шаблон держать как xlt не обязательно - его сложнее чуть подправлять.
XLGETACTIVEWORKBOOKNAME(wstr) ;
xlSaveAsWorkBookByName(wstr, wout) ;
XLKILLEXCEL ;
иначе при закрытии файла пойдет вопрос о сохранении в "мои документы"

Добавлено: 20 ноя 2007, 13:21
hope
А без шаблона никак? Или можно просто xls файл создать, в нем макросы настроить, в него же и писать данные из формы, а потом, наверное, надо будет сохранить его с другим именем (чтобы исходный файл остался нетронутым) - так возможно?

Добавлено: 20 ноя 2007, 13:41
edward_K
xlCreatefromtemplate в автомате делает новый экземпляр, так что исходный файл не затронете. А какое будет у него расширение ( xlt от xls в принципе ничем не отличаются вроде как - тока способом открытия и сохранения) не важно. Поэтому шаблон делайте как xls - так чуть проще с ним работать.

Добавлено: 20 ноя 2007, 13:53
Den
hope писал(а):А без шаблона никак? Или можно просто xls файл создать, в нем макросы настроить, в него же и писать данные из формы...
Конечно можно все и без шаблона и макросы настроить как надо по ходу...

Добавлено: 21 ноя 2007, 08:19
hope
А как макросы настроить по ходу? Да еще и параметры им передать желательно?

Добавлено: 21 ноя 2007, 10:07
edward_K
xlImportModule(file_mac);
xlRunMacro('MAC1(par1,par2)');
Другой способ отдельно делать лист данных и где то на нем указывать параметры для работы макроса - так например работает "состав заработной платы" да и все xlt отчеты(только более упорядоченно). Для отладки самого макроса это предпочтительней. Максро следует сохранять в windows кодировке, формат такой же как в Excel.

Добавлено: 21 ноя 2007, 15:28
Ksenia
я, например по ходу в отчете делаю так:
logstrtofile(sFileName,'Sub MacroBreak_'+OEM2ANSI(Replace(Replace(ShortMyOrgNameByExcel,' ','_'),'-',''))+CountRow+'()');
logstrtofile(sFileName,' With Worksheets("'+OEM2ANSI(ShortMyOrgNameByExcel)+'")');
for (i:=19;i<=CountRow;i:=i+20)
logstrtofile(sFileName,' .HPageBreaks.Add .Range("A'+(i)+'")');
logstrtofile(sFileName,'End With ');
logstrtofile(sFileName,'End Sub ');
xlImportModule(sFileName);
xlSetActiveSheetByName(ShortMyOrgNameByExcel)
xlRunMacro('MacroBreak_'+OEM2ANSI(Replace(Replace(ShortMyOrgNameByExcel,' ','_'),'-',''))+CountRow);

Этот кусок вставляет в конкретный лист макрос, который делает определенное число разрывов

Добавлено: 22 ноя 2007, 08:30
hope
Ок! Спасибо - буду пробовать!