在Excel VBA中关闭受保护的视图

时间:2015-09-24 19:05:53

标签: excel vba excel-vba

我需要从已从Intranet站点生成和新打开的文件(' 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. 我收到一个消息框说“#34;这不可能!"
  2. 如果单击“确定”,我将继续获取相同的消息框,该文件仍保留在“受保护的视图”中。
  3. 如果我单击取消然后单击F5(继续执行),循环将按预期工作(取消受保护的视图,TEMP的值设置为文件名,循环退出并继续宏。
  4. 如果我不使用' Resume Next'

    ,我尝试为NameOfNewFile分配值的行会返回错误
    • 运行时错误' 91':对象变量或未设置块变量

    我尝试了几种方法来解决这个问题:

    1. 在下载文件之前以及在尝试关闭受保护的视图之前立即运行此行,但行为仍然相同。

      Application.AutomationSecurity = msoAutomationSecurityForceDisable
      
    2. 将文件夹(存储下载文件的位置)放入受信任位置,但我的用户设置不允许这样做。

    3. 取消选中"为来自互联网的文件启用受保护的视图"信任中心的框,但未选中此框,我甚至无法打开该文件。

    4. 插入此代码(但"设置wbPV行"导致运行时错误' 424':需要对象):

      Dim wbPV As Workbook
      If Application.ProtectedViewWindows.Count > 0 Then
          Set wbPV = ActiveProtectedViewWindow.Edit
      End If
      
    5. 这需要经常对多个文件进行,因此在VBA中解决它会很有用。有人可以帮我找到一种方法来以编程方式为这种类型的下载文件关闭受保护的视图吗?或者是否有其他方法可以从文件中获取数据?

1 个答案:

答案 0 :(得分: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