Проблема
Код, написанный для автоматизации приложений Office и программного манипулирования средой VBA и объектной моделью, может дать сбой при работе в Office, отобразив одно из следующих сообщений об ошибке:
От Visual Basic или VBA:
Ошибка выполнения ‘6068’: Программный доступ к проекту Visual Basic не является доверенным.
От Microsoft Visual C++, Microsoft Foundation Classes (MFC) или ActiveX Template Library (ATL):
HRESULT = 0x800A17B4 (-2146822220) «Программный доступ к проекту Visual Basic не является доверенным»
Тот же самый код будет работать без ошибок на компьютерах с установленным Office 97 и Office 2000.
Причина
Приложение Office добавляет параметр безопасности, который намеренно блокирует программируемый доступ к объектной модели VBA из любого клиента автоматизации, за исключением тех случаев, когда пользователь решает разрешить подобный доступ. Доступ запрещается по умолчанию и разрешается каждым отдельным пользователем для каждого отдельного приложения.
Благодаря этому параметру безопасности неавторизованным программам становится гораздо трудней создать самореплицирующийся код, который может причинить вред системе конечного пользователя.
Решение
Чтобы любой клиент автоматизации получил доступ к объектной модели VBA программным способом, пользователь, запускающий код, должен предоставить полный доступ. Для включения доступа пользователь должен выполнить следующие действия.
Office 2003 и Office XP
-
Откройте приложение Office 2003 или Office XP соответственно. В меню Сервис выберите пункт Макрос, а затемБезопасность, чтобы открыть диалоговое окно Безопасность макросов.
-
Во вкладке Надежные источники установите флажок Доверять доступ к Visual Basic Project.
-
Нажмите кнопку OK, чтобы изменения вступили в силу. При автоматизации из надстройки Component Object Model или шаблона, возможно, придется перезапустить приложение, чтобы код запустился правильно.
Office 2007
-
Откройте вызывающее вопросы приложение версии 2007 системы Microsoft Office. Нажмите кнопку Microsoft Office, затем выберите Приложение Параметры.
-
Перейдите на вкладку Центр доверия и нажмите кнопку Параметры центра доверия.
-
На вкладке Параметры макроса установите флажок Доверять доступ к объектной модели VBA project и нажмите кнопку OK.
-
Нажмите кнопку ОК.
Нужна дополнительная помощь?
Не получается запустить макрос vba в проекте c#. Подскажите, что я делаю не так.
Сначала открываю excel файл,а затем прогоняю макрос. Но вылезает ошибка в строке
«oModule = oWb.VBProject.VBComponents.Add(VBA.vbext_ComponentType.vbext_ct_StdModule);»
Программный доступ к проекту Visual Basic не является доверенным
string xlSheetPath = textBox1.Text;
string ext = xlSheetPath.Substring(xlSheetPath.LastIndexOf("."),
xlSheetPath.Length - xlSheetPath.LastIndexOf("."));
int xlVersion = (xlSheetPath.Substring(xlSheetPath.LastIndexOf("."),
xlSheetPath.Length - xlSheetPath.LastIndexOf(".")) == ".xls") ?
8 : 12;
Microsoft.Office.Interop.Excel._Application xlApp = new
Excel.Application();
xlApp.Visible = true;
Excel.Workbook workbook = xlApp.Workbooks.Open(xlSheetPath);
Excel.Worksheet worksheet = workbook.Sheets[1];
//Где то тут включить макрос.
Excel.Workbook oWb;
Excel.Workbooks oWbs;
Excel.Worksheet oSheet;
VBA.VBComponent oModule;
String sCode;
//xlApp.SheetsInNewWorkbook = 1;
oWbs = (Excel.Workbooks)xlApp.Workbooks;
oWb = oWbs.Add(System.Reflection.Missing.Value);
oSheet = xlApp.Worksheets.Add();
oModule =
oWb.VBProject.VBComponents.Add(VBA.vbext_ComponentType.vbext_ct_StdModule);
sCode = "Sub copyTable()rn" +
"Dim colRange As Variantrn" +
"colRange = Array(1, 2, 3, 4, 5, 6, 7) 'Columns where your data
is'rn" +
"Dim destColRange As Variantrn" +
"destColRange = Array(10, 11, 12, 13, 14, 15, 16, 17) 'Columns
where you want data be copied'rn" +
"n = UBound(colRange) - LBound(colRange)rn" +
"i = 2 'Initial row'rn" +
"newI = irn" +
"maxLen = 500 'Maximum size allowed in one cell'rn" +
"While Not (Cells(i, colRange(0)) Is Nothing) And (Cells(i,
colRange(0)) <> "")rn" +
"Text = Cells(i, colRange(n))rn" +
"Dorn" +
"For j = 0 To n - 1rn" +
"Cells(newI, destColRange(j)) = Cells(i, colRange(j))rn" +
"Next jrn" +
"Cells(newI, destColRange(j)) = Mid(Text, 1, maxLen)rn" +
"Text = Mid(Text, maxLen + 1)rn" +
"newI = newI + 1rn" +
"Loop Until Len(Text) <= 0rn" +
"i = i + 1 rn" +
"Wendrn" +
"End Subrn";
oModule.CodeModule.AddFromString(sCode);
sCode = null;
xlApp.Run("[copyTable]", Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing);
….
mobile 26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
1 |
||||
Программный доступ к проекту не является доверенным07.03.2016, 13:30. Показов 13572. Ответов 10 Метки нет (Все метки)
Пытаюсь из vbs вызвать юзер-форму excel-файла, оставив при этом приложение невидимым. Код простой, но выходит на ошибку «Программный доступ к проекту не является доверенным» и форма, разумеется не открывается
Если такое в принципе возможно, подскажите как исправить. Добавлено через 1 минуту
0 |
1588 / 661 / 225 Регистрация: 09.06.2011 Сообщений: 1,334 |
|
07.03.2016, 13:42 |
2 |
Может это: Параметры ExcelЦентр управления безопастностьюПараметры центра управления безопастностью…Параметры макросов — отметить «Доверять доступ к объектной модели проектов VBA» Миниатюры
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
07.03.2016, 13:48 |
3 |
0 |
26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
|
07.03.2016, 13:50 [ТС] |
4 |
Параметры макросов — отметить «Доверять доступ к объектной модели проектов VBA» Тогда бы форма не отрабатывала в приложении. Она отрабатывает. И код работает. И макросы в модулях тоже.
0 |
1588 / 661 / 225 Регистрация: 09.06.2011 Сообщений: 1,334 |
|
07.03.2016, 13:53 |
5 |
Макросы работают если включены, а вот wrk.Vbproject и есть обращение к объектной модели
1 |
26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
|
07.03.2016, 14:05 [ТС] |
6 |
wrk.Vbproject и есть обращение к объектной модели Понял. Исправил. Вернее добавил доверительную галку. Но теперь другая ошибка: «Объект не поддерживает это свойство или метод: ‘wrk.Vbproject.UserForm1′». В имени формы ошибок нет. Имя формы скопировано из свойств.
Посмотри здесь Как включить доверие и уровень безопасности (решение) Все решения, которые я там увидел, связаны с правкой реестра. Но я не имею таких прав.
0 |
Step_UA 1588 / 661 / 225 Регистрация: 09.06.2011 Сообщений: 1,334 |
||||||||
07.03.2016, 14:34 |
7 |
|||||||
Сообщение было отмечено mobile как решение Решение
Но теперь другая ошибка: «Объект не поддерживает это свойство или метод: ‘wrk.Vbproject.UserForm1′» предполагаю, что через объектную модель напрямую не получится вызвать показ формы …
Вызывать
… скорее всего приложение прийдется показывать
1 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
07.03.2016, 14:39 |
8 |
Сообщение было отмечено mobile как решение РешениеЕсли добавить UserForm1.Show vbModeless, то приложение можно и не показывать.
2 |
26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
|
07.03.2016, 15:40 [ТС] |
9 |
Если добавить UserForm1.Show vbModeless, то приложение можно и не показывать. Это решение! Спасибо. Получилось
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
07.03.2016, 15:46 |
10 |
Mobile, Решение предложил Step_UA, а я просто мимо проходил
0 |
26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
|
07.03.2016, 17:13 [ТС] |
11 |
Решение предложил Step_UA Принято. Понято. Нажато
0 |
Некоторые люди жаловались на Excel ошибка времени выполнения 1004. С самого начала эта ошибка может показаться серьезной проблемой, но по правде говоря, это больше отвлекает, чем что-либо еще. Ошибка времени выполнения 1004 может возникнуть, если Excel не получает доступ к Microsoft Visual Basic для приложений (VBA) или макросам.
Мы говорим это потому, что ошибку времени выполнения 1004 легко исправить, поэтому люди не должны терять из-за нее голову. Да, мы понимаем, что это замедляет ваш рабочий процесс, но как только вы поймете, как вращать вещи, все будет в порядке. Теперь необходимо указать, что любой, кто столкнется с этой ошибкой, не сможет использовать определенные библиотеки ресурсов. Кроме того, могут возникать проблемы с производительностью и постоянные сбои, что еще больше затрудняет использование Excel.
Что такое ошибка времени выполнения 1004 в Excel
По нашему опыту, ошибка появляется в основном, когда пользователь пытается запустить макрос MS Visual Basic для приложений. Все это является процедурой безопасности для блокировки MS VBA из Excel, но если пользователь решит предоставить ему доступ, то ошибка времени выполнения 1004, скорее всего, никогда не появится. Сообщение об ошибке может иметь несколько вариантов, а именно:
- Ошибка выполнения 1004: ошибка, определяемая приложением или объектом
- Ошибка выполнения 1004: сбой метода копирования класса листа
- Ошибка 1004: программный доступ к проекту Visual Basic не является доверенным.
Первое, что вам здесь потребуется, это открыть Параметры Excel, что очень просто. Просто откройте Microsoft Excel, затем нажмите «Файл» и выберите «Параметры».
Сразу должен появиться раздел Параметры доверия. Оттуда выберите Настройки макроса.
Наконец, нажмите на Доверять доступ к объектной модели проекта VBA, затем нажмите Ok кнопку и все тут.
Сканирование на наличие вредоносных программ
В качестве меры предосторожности вы можете также выполнить сканирование на наличие вредоносных программ, поэтому обязательно запустите свой сканер защиты от вредоносных программ и выполняйте регулярное сканирование, чтобы увидеть, не всплывает ли что-нибудь. Если ничего не происходит, мы предлагаем выполнить полную проверку на вирусы, чтобы убедиться, что все в порядке.
Microsoft Defender — отличный инструмент для этой работы, но если вам этого недостаточно, мы предлагаем использовать бесплатный автономный сканер вредоносных программ.
I have two scheduled tasks on my computer. They both open Excel files and run a macro & are pretty similar in what they do. They both work on my computer. However I moved the scheduled tasks onto a colleague’s computer. One worked the other didn’t.
The one that didn’t work opened Excel but had an error saying:
«programmatic access to visual basic project is not trusted».
Like I say, both Excel files are very similar. The one that didn’t work does reference two additional projects the other one does not. They are,
Microsoft Visual Basic for Applications Extensibility 5.3
Microsoft Windows Common Controls-2.6.0 (SP6)
I have never come across this error before.
asked Sep 3, 2014 at 7:11
File -> Options -> Trust Center -> Trust Center Setttings -> Macro Settings -> Trust Access to the VBA Project object model.
This is usually needed if you are referencing Extensibility library.
answered Sep 3, 2014 at 7:15
3
Mac Version — In the past there was no setting for this on the Mac version. You did get always a dialog saying the thing.
But now, at least with version 16.30, not sure how long ago, the Mac Users have the same setting available.
BTW, it is under security, not under trust.
HTH
answered Oct 20, 2019 at 14:36
iPadawaniPadawan
85412 silver badges22 bronze badges
Its very easy to do this in Python using the pywin32
module by Mark Hammond.
What the above post by @user2140173 does actually is to change some registry values. This can be programmatically accomplished by the pywin32
module as follows:
import win32api
import win32con
key = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,
"Software\Microsoft\Office\16.0\Excel"
+ "\Security", 0, win32con.KEY_ALL_ACCESS)
win32api.RegSetValueEx(key, "AccessVBOM", 0, win32con.REG_DWORD, 1)
Ref:
- http://docs.activestate.com/activepython/2.4/pywin32/win32api__RegSetValueEx_meth.html
- http://docs.activestate.com/activepython/2.4/pywin32/win32api__RegOpenKeyEx_meth.html
Stuart
9,4451 gold badge21 silver badges30 bronze badges
answered Aug 3, 2018 at 19:45
alpha_989alpha_989
4,7812 gold badges37 silver badges48 bronze badges
2