【问题标题】:Run-time error '1004' This file is already open in Protected View运行时错误“1004”此文件已在受保护的视图中打开
【发布时间】:2015-11-25 13:17:31
【问题描述】:

我有一个从另一个 Excel 文件中读取数据的宏。如果该文件已被用户打开,Excel 会尝试重新打开该文件 - 到目前为止一切正常。

但是,如果文件在受保护的视图中打开,则宏将在此行停止:

Workbooks.Open Filename:=Sheets("Control Sheet").Range("C6").value

出现错误:

Run-time error '1004' This file is already open in Protected View

我该如何解决这个问题?

【问题讨论】:

  • 既然你只是从文件中读取数据,你能把Read Only参数设置为True吗Workbooks.Open Filename:=Sheets("Control Sheet").Range("C6").value, ReadOnly:=True

标签: excel vba runtime-error


【解决方案1】:

对于阅读,我推荐 Scott Holtzman 的解决方案:

Workbooks.Open Filename:="FileName", ReadOnly:=True 

对于其他情况,您可以通过以下方式删除保护模式:

Do While Application.ProtectedViewWindows.Count > 0
    Application.ProtectedViewWindows(1).Edit
Loop

【讨论】:

    【解决方案2】:

    如果没有打开的工作簿,Application.OnTime 可以正常工作,但如果明显处于活动状态的工作簿处于受保护的视图中,则不能正常工作(因为受保护的视图窗口不能是活动窗口)。

    一种解决方案是以编程方式在任何受保护的视图窗口中启用编辑,但这是一种糟糕的安全做法。

    代替这个,我做了一个小测试,如果前面似乎有一个受保护的视图窗口,我临时创建一个新窗口,运行Application.OnTime,然后关闭临时工作簿。

    ' Fix: OnTime fails if "active" window is protected view
    If Application.Windows.Count > 0 And ActiveWindow Is Nothing Then
        Dim bTempWkbk As Boolean
        bTempWkbk = True
        Dim wb As Workbook
        Set wb = Workbooks.Add
    End If
    Application.OnTime Now + TimeValue("0:00:02"), "OnTimeFunction"
    If bTempWkbk Then
        wb.Close False
    End If
    

    【讨论】:

      猜你喜欢
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 2018-01-25
      相关资源
      最近更新 更多