1

現在、次のコマンドを使用して、一連のワークブックを 1 つずつ開きます。

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

通常、ファイルはwrite-enabledモードで開かれています。これが私が望んでいることです。ただし、一部のファイルでは、前の行で次のウィンドウがポップアップ表示されます。

ここに画像の説明を入力

この場合は、 を押しRead Onlyて開く必要があります。とはいえ、read-only開けられるのはいいですね。

結論として、モードでファイルを開こうとしますがwrite-enabled、一部のファイルが不可能な場合でも、モードで開いてもread-only問題ありません。しかし、ファイルの数が膨大なので、自動化してこのポップアップを避けたいと思っています。誰かがそれを行う方法を教えてもらえますか?

考えられる回避策の 1 つは、最初にすべてのファイルをモードで開き、可能であればモードread-onlyに変換することです。write-enabledそれは実行可能だと思いますか?

4

2 に答える 2

0

これは可能な回避策です。アイデアは、間違ったパスワードを に渡すことですWriteResPassword argument。ファイルが保護されている場合、エラーがスローされます。その場合、そのファイルを特定して で開くことができますread-only mode。または、パスワードは他のファイルでは無視され、fill は で開かれ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
于 2013-08-06T20:00:01.190 に答える