Страница 1 из 1
RTF + Макрос
Добавлено: 28 июл 2020, 16:05
Buddy
Коллеги, можно ли как-нибудь прикрутить выполнение VBA-макроса при формировании RTF-отчета? Упоминания на форуме вроде есть, а конкретного примера нет. Требуется после формирования отчета его слегка дополнительно отформатировать. Макрос напишу сам, с этим проблем нет.
Re: RTF + Макрос
Добавлено: 28 июл 2020, 17:25
Den
через VbSript поупражняться можно
Re: RTF + Макрос
Добавлено: 28 июл 2020, 17:29
Buddy
Den, спасибо, интересное решение. Попробую применить его у себя.
Re: RTF + Макрос
Добавлено: 29 июл 2020, 18:18
Buddy
Написал макрос, но он выдает ошибку на строчке
Set oWord = GetObject(,"Word.Application")
Код: Выделить всё
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 );
}
Запускаю после вызова ShowFile:
Текст ошибки:
Беглый гуглеж по ошибке быстрого результата не дал - например, советуют использовать не GetObject, а CreateObject, но ведь в статье именно фигурирует GetObject, значит, решение должно работать и с ним.
Re: RTF + Макрос
Добавлено: 30 июл 2020, 11:40
Den
Ну это не ошибка Гал, явно.
Я делал так когда то одному заказчику - все работало.
Сейчас открыл у себя тестовый rtf, запустил VBS скрипт из винды . В результате макрос отработал и в rtf , чтобы было указано в скрипте, поменялось
Re: RTF + Макрос
Добавлено: 30 июл 2020, 13:34
Buddy
Так у меня мой скрипт работает, если запустить вручную (при открытом Ворде).
А при запуске из Галактики не хочет.
Re: RTF + Макрос
Добавлено: 30 июл 2020, 14:07
Den
Попробовал сгенерить скрипт из VIP и запустил его из Галактики.
Все ок отработало
Re: RTF + Макрос
Добавлено: 30 июл 2020, 15:47
Buddy
Я понял, в чем проблема.
Она в этом месте:
Судя по всему, макрос начинается выполняться еще до полного открытия документа. Надо как-то поставить задержку между этими командами.
Re: RTF + Макрос
Добавлено: 30 июл 2020, 15:58
Den
Такой большой документ что ли. Странно что так )
Ну между
labelsopr.ShowFile('');
и
RunMacro;
добавить цикл, ради иинтереса, секунд на 10 )
Re: RTF + Макрос
Добавлено: 30 июл 2020, 16:06
Buddy
Документ очень маленький вообще-то. А как добавить цикл на 10 секунд?
Re: RTF + Макрос
Добавлено: 03 авг 2020, 22:41
edward_K
Delay кажись, время в милисекундах