跳过自动弹出受保护的工作簿

时间:2013-08-05 20:38:24

标签: vba excel-vba excel

我现在使用以下命令逐个打开一组工作簿:

Workbooks.Open Filename:=fFile, Password:="", UpdateLinks:=xlUpdateLinksNever, ReadOnly:=False

通常文件以write-enabled模式打开,这就是我想要的。但是对于某些文件,前一行弹出以下窗口:

enter image description here

在这种情况下,我需要按Read Only将其打开。虽然它是read-only,但仍然可以打开它。

总而言之,我尝试以write-enabled模式打开文件,如果某些文件无法打开文件,则在read-only中打开文件仍然可以。但由于文件数量巨大,我真的想自动化它,并避免这种弹出窗口。谁能告诉我怎么做?

一种可能的转变是首先以read-only模式打开所有文件,然后在可能的情况下将其转换为write-enabled模式。你认为那是可行的吗?

2 个答案:

答案 0 :(得分:0)

这可能是您的解决方法。我们的想法是将任何不正确的密码传递给WriteResPassword argument。如果文件受到保护,则会抛出错误。如果是这样,您将能够识别该文件并在read-only mode中打开它。或者,对于其他文件,将忽略密码,并且read-write mode将打开填充。

以下代码中的一些其他评论。

Sub PossibleWorkaround()

    Dim Pass As String
    'any password
    Pass = "blahblah"

    'file which is write-protected will throw error during opening it _
    with incorrect password
    On Error Resume Next
    Workbooks.Open "c:\users\alpha\desktop\filename.xlsx", , , , , Pass
    If Err.Number = 1004 Then
        'if so, try to open it in read-only mode
        Workbooks.Open "c:\users\alpha\desktop\filename.xlsx", , True
    End If
    'return to standard error handling or set as expected
    On Error GoTo 0



    'the same for file which is not write-protected
    'incorrect password will be ignored
    On Error Resume Next
    Workbooks.Open "c:\users\alpha\desktop\filename A.xlsx", , , , , Pass
    If Err.Number = 1004 Then
        'therefore this if statement will not be called
        Workbooks.Open "c:\users\alpha\desktop\filename.xlsx", , True
    End If
    On Error GoTo 0
End Sub

答案 1 :(得分:0)

我遇到了同样的问题。我厌倦了在许多形式上找到答案,什么都没有。最后我在这里添加了WriteResPassword:="密码"在Worksbooks.Open语句的末尾,它不再提示输入密码

Workbooks.Open文件名:=" \文件路径\ File_name.xlsm",密码:="密码在这里",WriteResPassword:="密码在这里&#34 ;