Отключить защищенный просмотр в Excel VBA

Мне нужно извлечь данные из файла ('DatabaseExport.xlsx'), который был сгенерирован и вновь открыт с сайта интрасети. Файл открывается в режиме защищенного просмотра (желтый баннер в верхней части экрана). Я думаю, что необходимо отключить защищенное представление, чтобы я мог извлечь данные из файла. Мой VBA содержится в отдельном файле 'GetAndAnalyseData.xlsm':

NameOfNewFile = "ooo"
Do
    On Error Resume Next
        Application.ActiveProtectedViewWindow.Edit  'This never works first time
        NameOfNewFile = Left(ActiveWorkbook.Name, 14)
    On Error GoTo 0

    If NameOfNewFile = "ooo" Then
        ttt = MsgBox("this should not be possible!", vbOKCancel)
        If ttt = vbCancel Then Stop
    End If
Loop While NameOfNewFile = "ooo"

И вот что происходит, когда я запускаю код:

  1. Я получаю сообщение о том, что "это не должно быть возможно!"
  2. Если я нажимаю ОК, я получаю одно и то же сообщение, и файл остается в режиме защищенного просмотра.
  3. Если я нажимаю Отмена, а затем F5 (чтобы продолжить выполнение), цикл работает как надо (защищенное представление отменяется, значение TEMP устанавливается на имя файла, цикл завершается, и макрос продолжается.

Строка, в которой я пытаюсь присвоить значение для NameOfNewFile, возвращает ошибку, если я не использую "Resume Next":

  • Ошибка времени выполнения '91': переменная объекта или переменная блока не установлены

Я пробовал несколько способов исправить это:

  1. Запуск этой строки перед загрузкой файла, а также непосредственно перед попыткой отключить защищенный просмотр, но поведение остается тем же.

    Application.AutomationSecurity = msoAutomationSecurityForceDisable
    
  2. Превращение папки (в которой хранится загруженный файл) в надежное место, но это не разрешено моими пользовательскими настройками.

  3. Снимите флажок "Включить защищенное представление для файлов, исходящих из Интернета" в центре управления безопасностью, но если этот флажок не установлен, я даже не могу открыть файл.

  4. Вставка этого кода (но "Set wbPV line" вызывает ошибку во время выполнения "424": требуется объект):

    Dim wbPV As Workbook
    If Application.ProtectedViewWindows.Count > 0 Then
        Set wbPV = ActiveProtectedViewWindow.Edit
    End If
    

Это должно быть сделано для нескольких файлов, довольно часто, и поэтому было бы полезно решить это в VBA. Может кто-нибудь помочь мне найти способ программно отключить защищенный просмотр для этого типа загружаемого файла? Или есть какой-то другой способ получить данные из файла?

0 ответов

Вариант явный

    Sub Auto_edit_Workbooks()

    Dim wb As Workbook
    Dim wbPV As ProtectedViewWindow
        If Application.ProtectedViewWindows.Count > 0 Then
            For Each wbPV In Application.ProtectedViewWindows
            wbPV.Activate
            Set wb = wbPV.Edit()
            Next wbPV
        Else
        End If
    Set wb = Nothing
    End Sub
Другие вопросы по тегам