Программный доступ к проекту visual basic

пишу

try
Excel := CreateOleObject("Excel.Application");
Excel.WorkBooks.Open("C:Rpt20061.xls");
Excel.VBE.ActiveVBProject.VBComponents.Import("C:Module12.bas"); //Тут, как уже понятно, ошибка
Excel.Application.Run("Macro4",
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);

Читаем инет:
В ToolsMacroSecurity есть опция Trust access to VB project.
Вот е надо включить.

Ставим, Закрываем excel. Открываем, проверяем, стоит. Закрываем.
Запускаем программу. Однофигственно.

Читаем инет:
[HKEY_CURRENT_USERSOFTWAREMicrosoftOffice10.0ExcelSecurity]
"AccessVBOM"=dword:00000001

Стоит, Закрываем regedit. Открываем, проверяем, стоит. Закрываем.
Запускаем программу. Однофигственно.

Читаем инет:
Макрос – безопасность – низкая
Ставим, Закрываем excel. Открываем, проверяем, стоит. Закрываем.
Запускаем программу. Однофигственно.

Идем на ww.delphimaster.ru, спрашиваем:
Помогите, люди добрые, кто чем может, сами мы не местные.


Vlad Oshin © ( 2007-04-04 12:26 ) [1]

Макрос – безопасность – низкая/ средняя/ высокая
Тоже самое..


Vlad Oshin © ( 2007-04-04 15:40 ) [2]

А если писать на VBA макрос, то дает этот самый доступ
другой макрос импортируется, автозапускается
т.е. все доверенно получается

что же делать? как заставить из delphi это делать


umbra © ( 2007-04-04 15:58 ) [3]

а если в книге заранее сделать макрос-импортер, а из делфи вызывать этот макрос, передавая ему имя файла, который надо импортировать?


Паша 1 ( 2007-04-04 15:59 ) [4]

попробуй так:
Excel.DisplayAlerts:= False;

таким макаром ты говоришь ехелю, шоб он не задавал дурацких вопросов. правда, насчет макроса – не знаю, остальные вопросы не задает. типа, сохранять ли измененный файл, например.


umbra © ( 2007-04-04 16:04 ) [5]


> Excel.DisplayAlerts:= False;

на настройки безопасности это не влияет


Паша 1 ( 2007-04-04 16:40 ) [6]


> это не влияе

разве я где-то сказал, шо оно влияет? но вполне возможно, шо ехель тогда будет их просто игнорировать. или не будет

Читайте также:  Informatics mccme ru задачи


Vlad Oshin © ( 2007-04-04 16:42 ) [7]


> umbra © (04.04.07 15:58) [3]
> а если в книге заранее сделать макрос-импортер, а из делфи
> вызывать этот макрос, передавая ему имя файла, который надо
> импортировать?

так, значит, придется вставлять в книгу другой макрос. Программно. Иначе – какой смысл? Можно сразу вставить нужный.


> > Excel.DisplayAlerts:= False;
> на настройки безопасности это не влияет

угу, но на всякий случай – не работает.


umbra © ( 2007-04-04 16:50 ) [8]


>
> так, значит, придется вставлять в книгу другой макрос. Программно.
> Иначе – какой смысл? Можно сразу вставить нужный.

нет, можно сделать файл-образец с макросом-импортером. Затем, создавать новые книги, беря за шаблон этот файл ( Workbooks.Add(образец.xls) ). В новых файлах этот макрос уже будет. А потом его вызывать из делфи ( Application.Run("importer", "c:module.bas") ). Минус в том, что файл-образец должен быть всегда.

Но проблема с сообщением "Программный доступ к проекту Visual Basic не является доверенным" программно, похоже, не решается. Документированным способом, по крайней мере. Недокументированного я не знаю. 🙂

Еще вариант – ниписать AddIn для экселя.


Vlad Oshin © ( 2007-04-04 16:58 ) [9]


> > а если в книге заранее сделать макрос-импортер, а из делфи
>
> > вызывать этот макрос, передавая ему имя файла, который
> надо
> > импортировать?

а если так:
Создать книгу, обозвать Макросной, положить туда макрос. Сразу нужный.

Программно:
1. Открыть книгу Макросную, открыть книгу над которой надо поработать.
2. Выполнить макрос из Макросной книги, но в отношении другой.
(как сам эксель может делать – переходим в нужную книгу, выбираем макрос из другой книги, выполняем)

Читайте также:  Лучший неубиваемый телефон с мощным аккумулятором

Тогда вопрос:
А как это сделать? Выполнить макрос из книги, применительно к другой книге?

Следующее выполняет макрос в той же книге, где он и сидит.

Excel2 := CreateOleObject("Excel.Application");
Excel2.WorkBooks.Open("C:BookMacro.xls");

Excel := CreateOleObject("Excel.Application");
Excel.WorkBooks.Open("C:Rpt20061.xls");

Excel2.Application.Run("Macro4",
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);

Пробовал так:

Excel.Application.Run("BookMacro.xls!Macro4",
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
ругается, что макрос не найден


Vlad Oshin © ( 2007-04-04 16:59 ) [10]


> umbra © (04.04.07 16:50) [8]

упс.. долго писал
сейчас почитаю-попробую


umbra © ( 2007-04-04 17:05 ) [11]


> Выполнить макрос из книги, применительно к другой книге?

передавать макросу книгу в качестве параметра. И хранить можно не в отдельной книге, а в "Личной книге макросов", тогда он будет всегда доступен.


Vlad Oshin © ( 2007-04-04 17:15 ) [12]


> umbra © (04.04.07 17:05) [11]

спасибо, заработало вот так:

Excel := CreateOleObject("Excel.Application");
Excel.WorkBooks.Open("C:BookMacro.xls");
Excel.WorkBooks.Add("C:Rpt20061.xls");
Excel.Application.Run("Hurghada2_3.xls!Macro4",
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);

мне этого достаточно 🙂
спасибо
всем спасибо.


Vlad Oshin © ( 2007-04-04 17:18 ) [13]

только хотел вопрос про сбивающееся форматирование дозадать 🙂

Не получается запустить макрос vba в проекте c#. Подскажите, что я делаю не так. Сначала открываю excel файл,а затем прогоняю макрос. Но вылезает ошибка в строке "oModule = oWb.VBProject.VBComponents.Add(VBA.vbext_ComponentType.vbext_ct_StdModule);" Программный доступ к проекту Visual Basic не является доверенным

2 ответа 2

Дело может быть в самом Excel. Статью по ссылке почитайте. Может поможет. Запрещен программируемый доступ к проекту на VBA для Office По сути нужно разрешить в выполнение в Excel всех макросов – изменить настройки безопасности.

Опция включения доступа к объектной модели находится в Excel 2013 по следующему пути Файл>Параметры>Центр управления безопасностью> Кнопка "Параметры центра управления безопасностью. " > Вкладка "Параметры макросов". Вам нужна галочка "Предоставлять доступ к объектной модели проектов VBA"

Читайте также:  Как выключить сервер через консоль

Если у вас другой Excel – попробуйте поискать в сети где она находится. По идее все должно быть примерно там же.

У меня есть две запланированные задачи на моем компьютере. Они оба открывают файлы Excel и запускают макрос и очень похожи в том, что они делают. Они оба работают на моем компьютере. Однако я перенес запланированные задания на компьютер коллег. Один работал, другой нет.

Тот, который не работал, открыл Excel, но имел ошибку, говорящую:

"Программный доступ к Visual Basic Project не является доверенным".

Как я уже сказал, оба файла Excel очень похожи. Тот, который не работал, ссылается на два дополнительных проекта, а другой – нет. Они есть,

Я никогда не сталкивался с этой ошибкой раньше.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector