Имя: Пароль:
1C
 
Excel VBA: как программно добавить макрос?
Ø
0 swilf
 
02.10.06
02:49
Как средствами VBA к листу книги Excel добавить макрос на VBA?
1 swilf
 
02.10.06
03:22
Вот такой код из 1с:
Попытка
  Sheet.Parent.VBProject.VBComponents(Sheet.CodeName).CodeModule.InsertLines(1, MacroText);
Исключение
  XL.SendKeys("%е%м%б%н%в");
  Sheet.Parent.VBProject.VBComponents(Sheet.CodeName).CodeModule.InsertLines(1, MacroText);
КонецПопытки;
...работает, если в настройках безопасности разрешен доступ к макросам. А если запрещен, то Исключение не отрабатывает :(
Можно ли как-нибудь отловить этот запрет и послать Excelю последовательность кнопок, разрешающую макросам доступ к макросам?
2 pit
 
02.10.06
06:20
Разреши макросы программно...
3 swilf
 
02.10.06
06:45
(2) Как?
4 ХМ
 
02.10.06
08:55
Можно в ехеле создать макрос, которому в качестве параметра передать строки с нужным макросом и запустить на выполнение.
- создать макрос "ЗапускИз1С" и сохранить его в шаблоне
        в теле которого вставить VBComponents(Sheet.CodeName).CodeModule.InsertLines(1, MacroText);
- запустить его выполнение из 1С
- передать ему параметр MacroText
-
5 swilf
 
02.10.06
09:02
(4) Ну, если использовать шаблон, тогда проще заранее вставить в него нужные макросы (текст макроса не динамический). Но хочется без шаблона.
Проблема в том, что в Excel по умолчанию запрещено обращение к VBProject. Разрешить доступ можно через SendKeys - но только если заранее знать, что крыжика в чекбоксе "Доверять доступ к VB Project" нет.
6 ХМ
 
02.10.06
09:12
Вирусы начинаем писать как обойти защиту от вирусов в MS office?
Это не здесь.
7 swilf
 
02.10.06
09:15
(6) Боже упаси. Это расшифровка к подробному 1с-овскому отчету. По щелчку на статье в листе "Баланс" должен открыться лист с расшифровкой статьи.
8 ХМ
 
02.10.06
09:19
Я к тому, что ты пытаешься обойти защиту от макро вирусов. если необходимо вывести отчет в ехель лучше сделать шаблон.
9 smaharbA
 
02.10.06
10:42
HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security
AccessVBOM=1
Level=1
10 swilf
 
02.10.06
10:56
(9) Ага, нашел уже. Рабочий код для желающих:
ДоступКМакросам = 0;
Попытка
    Wsh = CreateObject("WScript.Shell");
    Wsh.RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\10.0\Excel\Security\AccessVBOM", 1, "REG_DWORD");
    Wsh.RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\11.0\Excel\Security\AccessVBOM", 1, "REG_DWORD");
    Wsh = "";
    ДоступКМакросам = 1;
Исключение
КонецПопытки;
XL = СоздатьОбъект("Excel.Application");
<...>
Sheet.Parent.VBProject.VBComponents(Sheet.CodeName).CodeModule.InsertLines(1, MacroText);