Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.235.226.14] |
|
Сообщ.
#1
,
|
|
|
Мысль создать подобный пример пришла в голову недавно. Сам мастерил один отчет, где в файле Excel пришлось использовать макрос. Примеров на 1С я не нашел. Нашел подобный пример на сайте Майкрософт на VB6 (KB 219905). Ну, а так как язык 1С недалеко ушел от васика, то немного подрихтовал пример на VB и всё.
Думаю, пример будет полезен для ФАКа (звучит то как ) Собственно сам пример: Процедура КнопкаВыполнитьНажатие(Кнопка) Попытка Excel=Новый ComОбъект("Excel.Application"); Книга = Excel.Workbooks.Add(); //Собственно сам текст модуля на VB ТекстПроцедуры = "Sub Workbook_Open()" + Символы.ПС + " MsgBox(""Привет"")" + Символы.ПС + "End sub"; //Добавляем в модуль книги код на VB из текстовой переменной Книга.VBProject.VBComponents.Item("ЭтаКнига").CodeModule.AddFromString (ТекстПроцедуры); //Добавляем то же самое в код листа Книга.VBProject.VBComponents.Item("Лист1").CodeModule.AddFromString (ТекстПроцедуры); //Текст модуля можно также вставлять из текстового файла, // предварительно сохраненного с расширением bas Книга.VBProject.VBComponents("ЭтаКнига").CodeModule.AddFromFile ("D:\ModuleTest.bas"); //Так вставляется из файла обычный модуль Книга.VBProject.VBComponents.Import ("D:\ModuleTest.bas"); //Сохраняем Книга.SaveAs("D:\СозданиеМакроса.xls"); //Закрываем Excel Книга.Close(); Предупреждение("Файл готов ""D:\СозданиеМакроса.xls"""); Исключение Предупреждение("Не удалось создать файл Excel: " + ОписаниеОшибки()); КонецПопытки; КонецПроцедуры текст модуля ModuleTest.bas 'Attribute VB_Name = "ModuleTest" Public Sub Test() MsgBox("Этот модуль вставили из текстового файла") End Sub обратите внимание на первую закомментированную строчку. Если её раскомментировать, то при добавлении текста из файла как обычный модуль, имя модуля будет ModuleTest. Добавлено У меня офис русский, поэтому имена книг и листов на русском. К компонентам можно обращаться также и по индексу. Например такая строка Книга.VBProject.VBComponents.Item(1).CodeModule.AddFromString (ТекстПроцедуры); будет аналогична строке Книга.VBProject.VBComponents.Item("ЭтаКнига").CodeModule.AddFromString (ТекстПроцедуры); Чуть не забыл самое главное - чтобы при создании макроса не вылетала ошибка, нужно разрешить программный доступ к среде VB. Как это сделать? - В Экселе пункт меню Сервис -> Макрос -> Безопасность -> Вкладка надежные издатели -> поставить галку Доверять доступ к Visual Basic Project |
Сообщ.
#2
,
|
|
|
СИНОР
Примерно то же самое на примере WINWORD, на синоре вобщем-то то же не мало FAQ Процедура Сформировать() Попытка W=СоздатьОбъект("Word.Application"); Исключение Возврат; КонецПопытки; W.Documents.Add(); i = W.VBE.ActiveVBProject.VBComponents.Count(); W.VBE.ActiveVBProject.VBComponents.Add (1); W.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (1, "Sub Golif()"); W.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (2, "MsgBox " + """" + "Работает" + """"); W.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (3, "End Sub"); W.Application.Run ("Golif"); W=""; КонецПроцедуры |