【问题标题】:Turn off Protected View in Excel VBA在 Excel VBA 中关闭受保护的视图
【发布时间】:2015-09-24 19:05:52
【问题描述】:

我需要从已从 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. 我收到一个消息框,提示“这不可能!”
  2. 如果单击“确定”,我会不断收到相同的消息框,并且该文件仍处于受保护的视图中。
  3. 如果我单击取消,然后按 F5(继续执行),循环将正常工作(受保护的视图被取消,TEMP 的值设置为文件名,循环退出并且宏继续。

如果我不使用“Resume Next”,我尝试为 NameOfNewFile 赋值的那一行会返回错误:

运行时错误“91”:对象变量或未设置块变量

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

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

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

  3. 取消选中信任中心中的“为源自 Internet 的文件启用受保护的视图”框,但如果取消选中此框,我将无法打开文件。

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

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

如何以编程方式为此类下载的文件关闭受保护的视图?还是有其他方法可以从文件中获取数据?

【问题讨论】:

  • 你试过 AcativeSheet.Unprotect
  • been generated and newly opened 这是怎么回事?您可以将其保存而不是打开,这应该可以解决您的问题吗?
  • 感谢您的回复。我已经尝试过 Activesheet.Unprotect 并给出了类似的错误消息,如果我将它放在“出错”部分中,它会给出与已经存在的行相同的行为。
  • 抱歉,澄清一下,Activesheet.Unprotect 给出错误 91。要回答 @findwindow,该文件是由公司 Intranet 站点生成的。保存而不是打开是一个很好的解决方法(如果我保存在手动指定的位置而不是默认的下载文件夹中,ActiveProtectedViewWindow.Edit 命令第一次起作用)。
  • 如果您将NameOfNewFile = Left(ActiveWorkbook.Name, 14) 移动到之后 On Error GoTo 0,您会收到错误消息吗?我强烈怀疑你会。不保证有效,但请尝试在Do 之后添加DoEvents

标签: excel vba


【解决方案1】:

选项显式

    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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2018-11-18
    相关资源
    最近更新 更多