На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Этот раздел предназначен для заполнения/проверки/рехтования/* содержимого будущего FAQ и не более того.
Все вопросы касательно 1С следует задавать здесь: 1С: Проблемы и решения
  
> Динамическое создание макроса , в книге Excel
    Мысль создать подобный пример пришла в голову недавно. Сам мастерил один отчет, где в файле Excel пришлось использовать макрос. Примеров на 1С я не нашел. Нашел подобный пример на сайте Майкрософт на VB6 (KB 219905). Ну, а так как язык 1С недалеко ушел от васика, то немного подрихтовал пример на VB и всё.
    Думаю, пример будет полезен для ФАКа (звучит то как :D)
    Собственно сам пример:
    ExpandedWrap disabled
      Процедура КнопкаВыполнитьНажатие(Кнопка)
         Попытка
          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
    ExpandedWrap disabled
      'Attribute VB_Name = "ModuleTest"
      Public Sub Test()
        MsgBox("Этот модуль вставили из текстового файла")  
      End Sub

    обратите внимание на первую закомментированную строчку.
    Если её раскомментировать, то при добавлении текста из файла как обычный модуль, имя модуля будет ModuleTest.

    Добавлено
    У меня офис русский, поэтому имена книг и листов на русском. К компонентам можно обращаться также и по индексу. Например такая строка
    ExpandedWrap disabled
      Книга.VBProject.VBComponents.Item(1).CodeModule.AddFromString (ТекстПроцедуры);

    будет аналогична строке
    ExpandedWrap disabled
      Книга.VBProject.VBComponents.Item("ЭтаКнига").CodeModule.AddFromString (ТекстПроцедуры);

    Чуть не забыл самое главное - чтобы при создании макроса не вылетала ошибка, нужно разрешить программный доступ к среде VB. Как это сделать? - В Экселе пункт меню Сервис -> Макрос -> Безопасность -> Вкладка надежные издатели -> поставить галку Доверять доступ к Visual Basic Project
    Сообщение отредактировано: Rust -
      СИНОР

      Примерно то же самое на примере WINWORD, на синоре вобщем-то то же не мало FAQ
      ExpandedWrap disabled
        Процедура Сформировать()
             Попытка    
                  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="";
        КонецПроцедуры
      Сообщение отредактировано: lamer19 -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0256 ]   [ 16 queries used ]   [ Generated: 19.03.24, 10:43 GMT ]