Member 13314240 Ответов: 3

Включите/отключите поле "предупреждение безопасности" в EXCEL.


В моем файле Visual Basic(VB6)у меня есть 3 OLEs.(Excel как объект во всем.) Они открываются по мере Книга1,как book2 &амп;Book3.
Данные, приведенные в моем VBfile, передаются в Book1, там выполняются некоторые вычисления, а затем некоторая информация из Book1 переходит в Book2. В Book2 большое количество кода записывается в его VBA с помощью VBEditor.
Этот код запускается в случае "добавления нового листа". Это событие запускается из моего файла VB6.
После выполнения кода результаты отправляются в Book3, который выставляется на чтение. Book1 и Book2 не становятся видимыми, они работают в фоновом режиме.
Я использую офис 2007 для Windows 7. Макросы были отключены уведомления" в настройках доверия Центра.

Моя проблема:-
Окно предупреждения безопасности с просьбой включить макросы не отображается на экране. Возможно, она лежит на заднем плане.
Программа зависает, когда мой код VB6 достигает стадии открытия Book2 (в которой есть код vba) для передачи данных из Book1 в Book2. Сообщение "Приложение занято...переключиться на.. и т.д." появляется на экране, когда я пытаюсь щелкнуть по экрану. Если в этот момент я открою любой другой внешний файл excel, появится окно предупреждения для включения макросов.
Затем включаются макросы, код в Book2 vba работает и появляются сообщения об ошибках vba. Эти ошибки не возникают, если макросы включены в настройках Центра доверия, то этот код работает нормально и, наконец, Book3 появляется с конечными результатами.
Иногда, когда внешний файл excel закрыт, приходит сообщение "Excel перестал работать...и т. д.".
Есть ли в любом случае заставить окно предупреждения безопасности автоматически появляться на передней панели экрана, чтобы я мог включить макросы для этого сеанса ?

Что я уже пробовал:

Эта проблема относится только к OLE. Другие внешние файлы excel (не связанные с файлом VB6) с кодом vba легко открываются (с помощью трюка сделать все листы очень скрытыми/один лист видимым и т. д. и т. д.), и на экране появляется предупреждающее окно. Тогда никаких проблем. Все мои OLE - объекты имеют тип .xlsm. Через VB6 внешние файлы .xlsm легко открываются, даже если макросы отключены. Проблема возникает только с Оле выделяется.

3 Ответов

Рейтинг:
2

Maciej Los

Вы можете отключить его, но я не рекомендую этого делать!

Видеть:
Включение или отключение предупреждений безопасности на панели сообщений - служба поддержки Office[^]
Включение или отключение макросов в файлах Office - поддержка Office[^]

Если у вас есть какой-либо макрос для выполнения некоторых вычислений, я бы предложил переписать его в ваш VB-проект.


Рейтинг:
11

Member 13314240

Я сам мог бы найти обходной путь для решения этой проблемы следующим образом:-
Фиктивный файл excel в VB6.Был создан путь к файлу приложения. Перед открытием
Book2, этот фиктивный файл принудительно открывается/закрывается, чтобы вызвать защиту
предупреждающее окно появится на экране, снаружи. Код на VB6 является:-

Dim NConnect As FileDialog
Set NConnect = Application.FileDialog(msoFileDialogFolderPicker)
Set xlApp = New Excel.Application 'This file is opened only to force the vb to make the security warning box visible in the screen.
xlApp.Visible = True
Set wb = xlApp.Workbooks.Open(App.Path & "\dummy.xlsx")
wb.Application.DisplayAlerts = False
wb.NewWindow.Visible = True
wb.Save
wb.Close
xlApp.Quit
Set xlApp = Nothing
Set wb = Nothing


Спасибо Вам за быстрый ответ/предлагаемые решения. Меня интересует альтернативный вариант
решения этой проблемы, а также любые мысли о моем обходном пути.


Рейтинг:
0

CHill60

Ваша проблема заключается в том, что книга, содержащая макросы, не видна - как и "сеанс", в котором она открывается, не виден.

Поскольку вы используете 3 OLE-объекта, у вас, по сути, есть 3 экземпляра Excel, тогда как при попытке сделать то же самое в VBA все книги открываются в такой же экземпляр Excel - и поэтому отображается сообщение.

Это кажется очень странной моделью, которую вы используете - есть ли реальная потребность в трех книгах вместо одной? Вы можете использовать трюк со скрытым листом так же легко