Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
パスワードが掛かっているファイルはパスワード入力ダイアログを表示したい。
投稿日時: 19/04/12 22:42:39
投稿者: mattuwan44

パスワードが掛かっているファイルはパスワード入力ダイアログを表示したいのですが、
どうやったら、出るようになるでしょうか?
 
以下のように書いても出るように思うのですが。。。。^^;
 

Sub test()
    Const myPath As String = "D:\Test1\book100.xlsx"
    'Const myPath As String = "D:\Test1\book200.xlsx"
    Dim AppExcel As Excel.Application
    Dim wb As Workbook
    Dim sProm As String

    sProm = "ファイルが見つかりません。"
    If Len(Dir(myPath)) = 0 Then GoTo ErrHandler2

    Set AppExcel = CreateObject("Excel.Application")
    AppExcel.Visible = True

    On Error Resume Next
    Set wb = AppExcel.Workbooks.Open(myPath, , , , "")
    On Error GoTo 0
    
    If wb Is Nothing Then
        sProm = "ファイルを開けませんでした。"
    Else
        wb.Close False
        sProm = "ファイルを閉じました。"
    End If

ErrHandler2:
    AppExcel.Quit
    MsgBox sProm
End Sub

回答
投稿日時: 19/04/12 23:03:08
投稿者: WinArrow
投稿者のウェブサイトに移動

まず、エラートラップを外して、
 
ステップ実行で、流れを確認してみましょう。

回答
投稿日時: 19/04/13 14:33:29
投稿者: Suzu

Openメソッド自体に、パスワードを指定する引数があります。
 
パスワード付のファイルを開く場合には、そこにパスワードの文字列を渡す事で ファイルが開きます。
パスワード付のファイルを開くのに、パスワード引数に違う文字等が入っていると実行時エラーが返ります。
 
が、今回、On Error Resume Next にてエラートラップを行っているので、
そのメッセージすら表示されないのです。
 
パスワードが入っているファイルを開いた場合、一度開き Err.Number にて
実行時エラーが発生しているなら、パスワード付の可能性があるので、
条件分岐をさせればよいでしょう。

投稿日時: 19/04/13 16:46:14
投稿者: mattuwan44

回答ありがとうございます。
 
お二方とも言いたいのは、
 

引用:
が、今回、On Error Resume Next にてエラートラップを行っているので、
そのメッセージすら表示されないのです。

 
だと思いますが、
そのように理解してそのように書いているのでそこが、
問題だとは思っていません。
 
パスワードがあるファイルとないファイルとが混在するときに、
場合分けをして、パスワードが必要な場合は、
パスワードの入力を促すようにしたかったのですが。。。。。
 
 
ネット上のサンプルに引きずられて、
パスワードの引数に
Password:=vbNullString
とか
Password:=""
とか入れないといけないものだと思い込んでました^^;
 
Suzuさんの回答をみて、引数を省略してみたらどなるかヘルプで確認しました。
 
ヘルプ さんの引用:
Password オプション バリアント型 (Variant) パスワード保護されたブックを開くのに必要なパスワードを指定します。この引数を省略した場合、パスワードが必要なブックでは、パスワードの入力を促すダイアログ ボックスがユーザーに表示されます。

 
省略して入力のダイアログボックスが表示されました。
 
Sub test()
    Const myPath As String = "D:\Test1\book100.xlsx"
'   Const myPath As String = "D:\Test1\book200.xlsx"
    Dim AppExcel As Excel.Application
    Dim wb As Workbook
    Dim sProm As String

    sProm = "ファイルが見つかりません。"
    If Len(Dir(myPath)) = 0 Then GoTo ErrHandler2

    Set AppExcel = CreateObject("Excel.Application")
    AppExcel.Visible = True

    On Error Resume Next
    Set wb = AppExcel.Workbooks.Open(myPath)
    On Error GoTo 0
    
    If wb Is Nothing Then
        sProm = "キャンセルしました。"
    Else
        wb.Close False
        sProm = "ファイルを閉じました。"
    End If

ErrHandler2:
    AppExcel.Quit
    MsgBox sProm
End Sub

 
ありがとうございました。