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

Проблема

Код, написанный для автоматизации приложений 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

  1. Откройте приложение Office 2003 или Office XP соответственно. В меню Сервис выберите пункт Макрос, а затемБезопасность, чтобы открыть диалоговое окно Безопасность макросов.

  2. Во вкладке Надежные источники установите флажок Доверять доступ к Visual Basic Project.

  3. Нажмите кнопку OK, чтобы изменения вступили в силу. При автоматизации из надстройки Component Object Model или шаблона, возможно, придется перезапустить приложение, чтобы код запустился правильно.

Office 2007

  1. Откройте вызывающее вопросы приложение версии 2007 системы Microsoft Office. Нажмите кнопку Microsoft Office, затем выберите Приложение Параметры.

  2. Перейдите на вкладку Центр доверия и нажмите кнопку Параметры центра доверия.

  3. На вкладке Параметры макроса установите флажок Доверять доступ к объектной модели VBA project и нажмите кнопку OK.

  4. Нажмите кнопку ОК.

Нужна дополнительная помощь?

Не получается запустить макрос 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

Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

1

Программный доступ к проекту не является доверенным

07.03.2016, 13:30. Показов 13572. Ответов 10

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Пытаюсь из vbs вызвать юзер-форму excel-файла, оставив при этом приложение невидимым. Код простой, но выходит на ошибку «Программный доступ к проекту не является доверенным» и форма, разумеется не открывается

Visual Basic
1
2
3
Set app = CreateObject("excel.application")
Set wrk = app.workbooks.Open("C:TempКнига1.xls")
wrk.Vbproject.UserForm1.Show  'Здесь ошибка

Если такое в принципе возможно, подскажите как исправить.

Добавлено через 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



Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

07.03.2016, 13:50

 [ТС]

4

Цитата
Сообщение от Step_UA
Посмотреть сообщение

Параметры макросов — отметить «Доверять доступ к объектной модели проектов VBA»

Тогда бы форма не отрабатывала в приложении. Она отрабатывает. И код работает. И макросы в модулях тоже.



0



1588 / 661 / 225

Регистрация: 09.06.2011

Сообщений: 1,334

07.03.2016, 13:53

5

Макросы работают если включены, а вот wrk.Vbproject и есть обращение к объектной модели



1



Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

07.03.2016, 14:05

 [ТС]

6

Цитата
Сообщение от Step_UA
Посмотреть сообщение

wrk.Vbproject и есть обращение к объектной модели

Понял. Исправил. Вернее добавил доверительную галку.

Но теперь другая ошибка: «Объект не поддерживает это свойство или метод: ‘wrk.Vbproject.UserForm1′». В имени формы ошибок нет. Имя формы скопировано из свойств.

Цитата
Сообщение от toiai
Посмотреть сообщение

Посмотри здесь Как включить доверие и уровень безопасности (решение)

Все решения, которые я там увидел, связаны с правкой реестра. Но я не имею таких прав.



0



Step_UA

1588 / 661 / 225

Регистрация: 09.06.2011

Сообщений: 1,334

07.03.2016, 14:34

7

Лучший ответ Сообщение было отмечено mobile как решение

Решение

Цитата
Сообщение от mobile
Посмотреть сообщение

Но теперь другая ошибка: «Объект не поддерживает это свойство или метод: ‘wrk.Vbproject.UserForm1′»

предполагаю, что через объектную модель напрямую не получится вызвать показ формы …
как вариант формировать через объектную модель модуль с макросом или предварительно его добавить в «C:TempКнига1.xls»

Visual Basic
1
2
3
Public Sub r()
    UserForm1.Show
End Sub

Вызывать

Visual Basic
1
app.Run "Книга1.xls!Module1.r"

… скорее всего приложение прийдется показывать



1



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.03.2016, 14:39

8

Лучший ответ Сообщение было отмечено mobile как решение

Решение

Если добавить UserForm1.Show vbModeless, то приложение можно и не показывать.



2



Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

07.03.2016, 15:40

 [ТС]

9

Цитата
Сообщение от pashulka
Посмотреть сообщение

Если добавить UserForm1.Show vbModeless, то приложение можно и не показывать.

Это решение! Спасибо. Получилось



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.03.2016, 15:46

10

Mobile, Решение предложил Step_UA, а я просто мимо проходил



0



Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

07.03.2016, 17:13

 [ТС]

11

Цитата
Сообщение от pashulka
Посмотреть сообщение

Решение предложил Step_UA

Принято. Понято. Нажато



0



Некоторые люди жаловались на Excel ошибка времени выполнения 1004. С самого начала эта ошибка может показаться серьезной проблемой, но по правде говоря, это больше отвлекает, чем что-либо еще. Ошибка времени выполнения 1004 может возникнуть, если Excel не получает доступ к Microsoft Visual Basic для приложений (VBA) или макросам.

Ошибка Excel 1004

Мы говорим это потому, что ошибку времени выполнения 1004 легко исправить, поэтому люди не должны терять из-за нее голову. Да, мы понимаем, что это замедляет ваш рабочий процесс, но как только вы поймете, как вращать вещи, все будет в порядке. Теперь необходимо указать, что любой, кто столкнется с этой ошибкой, не сможет использовать определенные библиотеки ресурсов. Кроме того, могут возникать проблемы с производительностью и постоянные сбои, что еще больше затрудняет использование Excel.

Что такое ошибка времени выполнения 1004 в Excel

По нашему опыту, ошибка появляется в основном, когда пользователь пытается запустить макрос MS Visual Basic для приложений. Все это является процедурой безопасности для блокировки MS VBA из Excel, но если пользователь решит предоставить ему доступ, то ошибка времени выполнения 1004, скорее всего, никогда не появится. Сообщение об ошибке может иметь несколько вариантов, а именно:

  • Ошибка выполнения 1004: ошибка, определяемая приложением или объектом
  • Ошибка выполнения 1004: сбой метода копирования класса листа
  • Ошибка 1004: программный доступ к проекту Visual Basic не является доверенным.

Первое, что вам здесь потребуется, это открыть Параметры Excel, что очень просто. Просто откройте Microsoft Excel, затем нажмите «Файл» и выберите «Параметры».

Исправить ошибку 1004 в 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.

Shark Lasers's user avatar

asked Sep 3, 2014 at 7:11

mHelpMe's user avatar

File -> Options -> Trust Center -> Trust Center Setttings -> Macro Settings -> Trust Access to the VBA Project object model.

enter image description here

enter image description here

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

screenshot privacy trust VBA object model

answered Oct 20, 2019 at 14:36

iPadawan's user avatar

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:

  1. http://docs.activestate.com/activepython/2.4/pywin32/win32api__RegSetValueEx_meth.html
  2. http://docs.activestate.com/activepython/2.4/pywin32/win32api__RegOpenKeyEx_meth.html

Stuart's user avatar

Stuart

9,4451 gold badge21 silver badges30 bronze badges

answered Aug 3, 2018 at 19:45

alpha_989's user avatar

alpha_989alpha_989

4,7812 gold badges37 silver badges48 bronze badges

2

Понравилась статья? Поделить с друзьями:
  • Программный продукт excel что это
  • Программные цели в excel
  • Программные рисунки для word
  • Программный поиск в excel
  • Программные работы с текстом word