RTF + Макрос
Модераторы: m0p3e, edward_K, Модераторы
RTF + Макрос
Коллеги, можно ли как-нибудь прикрутить выполнение VBA-макроса при формировании RTF-отчета? Упоминания на форуме вроде есть, а конкретного примера нет. Требуется после формирования отчета его слегка дополнительно отформатировать. Макрос напишу сам, с этим проблем нет.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: RTF + Макрос
через VbSript поупражняться можно
Re: RTF + Макрос
Den, спасибо, интересное решение. Попробую применить его у себя.
Re: RTF + Макрос
Написал макрос, но он выдает ошибку на строчке Set oWord = GetObject(,"Word.Application")
Запускаю после вызова ShowFile:
Текст ошибки:
Беглый гуглеж по ошибке быстрого результата не дал - например, советуют использовать не GetObject, а CreateObject, но ведь в статье именно фигурирует GetObject, значит, решение должно работать и с ним.
Код: Выделить всё
Procedure RunMacro;
{
var FileName, VBSFileName : string;
FileName := CreateTmpFileName;
VBSFileName := TranslatePath ( GetStringParameter ( 'Files','OutputFilesDirectory', 0 ) + 'soprlabel.vbs' );
LogStrToFile ( FileName, oem2ansi( 'Dim oWord' ));
LogStrToFile ( FileName, oem2ansi( 'Set oWord = GetObject(,"Word.Application")' ));
LogStrToFile ( FileName, oem2ansi( 'If Not (oWord Is Nothing) then' ));
LogStrToFile ( FileName, oem2ansi( ' Dim oDoc' ));
LogStrToFile ( FileName, oem2ansi( ' Set oDoc = oWord.Documents.Item(1)' ));
LogStrToFile ( FileName, oem2ansi( ' Dim t' ));
LogStrToFile ( FileName, oem2ansi( ' For t=1 To oDoc.Tables.Count' ));
LogStrToFile ( FileName, oem2ansi( ' Do While Len(oDoc.Tables(t).Cell(oDoc.Tables(t).Rows.Count, 1).Range.Text) = 2' ));
LogStrToFile ( FileName, oem2ansi( ' oDoc.Tables(t).Rows(oDoc.Tables(t).Rows.Count).Delete' ));
LogStrToFile ( FileName, oem2ansi( ' Loop' ));
LogStrToFile ( FileName, oem2ansi( ' Next' ));
LogStrToFile ( FileName, oem2ansi( 'End If' ));
LogStrToFile ( FileName, oem2ansi( 'WScript.Quit 0' ));
if FileExist ( VBSFileName )
DeleteFile ( VBSFileName );
if CopyMoveFile ( FileName, VBSFileName, true, ecmfClientFrom + ecmfClientTo )
ExecProgram ( 'start', VBSFileName, 'Запуск макроса...',pfSilent,0 );
if FileExist ( VBSFileName )
DeleteFile ( VBSFileName );
}
Код: Выделить всё
labelsopr.ShowFile('');
RunMacro;
Беглый гуглеж по ошибке быстрого результата не дал - например, советуют использовать не GetObject, а CreateObject, но ведь в статье именно фигурирует GetObject, значит, решение должно работать и с ним.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: RTF + Макрос
Ну это не ошибка Гал, явно.
Я делал так когда то одному заказчику - все работало.
Сейчас открыл у себя тестовый rtf, запустил VBS скрипт из винды . В результате макрос отработал и в rtf , чтобы было указано в скрипте, поменялось
Я делал так когда то одному заказчику - все работало.
Сейчас открыл у себя тестовый rtf, запустил VBS скрипт из винды . В результате макрос отработал и в rtf , чтобы было указано в скрипте, поменялось
Re: RTF + Макрос
Так у меня мой скрипт работает, если запустить вручную (при открытом Ворде).
А при запуске из Галактики не хочет.
А при запуске из Галактики не хочет.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: RTF + Макрос
Попробовал сгенерить скрипт из VIP и запустил его из Галактики.
Все ок отработало
Все ок отработало
Re: RTF + Макрос
Я понял, в чем проблема.
Она в этом месте:
Судя по всему, макрос начинается выполняться еще до полного открытия документа. Надо как-то поставить задержку между этими командами.
Она в этом месте:
Код: Выделить всё
labelsopr.ShowFile('');
RunMacro;
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: RTF + Макрос
Такой большой документ что ли. Странно что так )
Ну между
labelsopr.ShowFile('');
и
RunMacro;
добавить цикл, ради иинтереса, секунд на 10 )
Ну между
labelsopr.ShowFile('');
и
RunMacro;
добавить цикл, ради иинтереса, секунд на 10 )
Re: RTF + Макрос
Документ очень маленький вообще-то. А как добавить цикл на 10 секунд?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: RTF + Макрос
Delay кажись, время в милисекундах