Excel (VBA)

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

 
(Windows 10 Pro : Excel 2016)
パスワードのスキップ
投稿日時: 21/11/04 22:57:59
投稿者: TRACK&FIELD

初めまして
パスワードのかかったエクセルファイルの開き方をご教示ください
 
Private Sub CommandButton2_Click()
'ファイルを開く
 
    Dim sinpan As String
    Dim n As Integer
     
      ' ChDir "E:\Work"
        sinpan = Application.GetOpenFilename("Excel, *.xls?")
         
                If sinpan <> "False" Then
                        Workbooks.Open sinpan, Password:="********"
                Else
                        MsgBox "キャンセルされました"
                End If
         
        'Workbooks.Open sinpan, Password:="2021rikujousinpan"
 
      *
      *
      *
      *
      *
      *
      *
このマクロでは一度パスワードを聞いてきます
キャンセル後に開くをおすと正常に動きますが、パスワードをスキップしない方法をご教示ください。

投稿日時: 21/11/05 06:55:59
投稿者: TRACK&FIELD

間違えました
パスワードをスキップしない方法 ではなく スキップする方法です。
よろしくお願いします

投稿日時: 21/11/05 06:56:42
投稿者: TRACK&FIELD

間違えました
パスワードをスキップしない方法 ではなく スキップする方法です。
よろしくお願いします

回答
投稿日時: 21/11/05 07:17:05
投稿者: simple

ステップ実行(F8を押して一行ごとに実行させる方法)をしてみてください。
Workbooks.Open sinpan, Password:="********"
が実行されたときに
>このマクロでは一度パスワードを聞いてきます
のですか?
 
そのコードであれば、パスワードは聞いてこないはずです。
指定したパスワードがそれまでに設定したものと不一致ならば、そうした警告が出ますし、
一致していれば、そのまま開くはずです。
 
 'Workbooks.Open sinpan, Password:="2021rikujousinpan"
はコメントなので、実行はされないと理解しています。
示されたコード以外でBookを開いている箇所はありませんか?
 
まずは、事実関係を正確に示してください。

投稿日時: 21/11/05 07:54:08
投稿者: TRACK&FIELD

 sinpan = Application.GetOpenFilename("Excel, *.*")
 
この時点パスワードを聞いてきます
 
キャンセルをするとファイルを開く画面に再度戻りますので、そこでファイルを選ぶと次に進んでいきます。
 
説明が下手で済みません。
よろしくお願いします。

回答
投稿日時: 21/11/05 08:15:01
投稿者: simple

それはどのようにして確認されましたか?
 
sinpan = Application.GetOpenFilename("Excel, *.xls?")
というのは、単にダイアログでファイルを指定して、
そのパス(フォルダ名+フィル名)を取得するだけの機能ですから、
それにパスワードがついているかなどということは調べないはずです。

投稿日時: 21/11/05 08:24:08
投稿者: TRACK&FIELD

>ダイアログでファイルを指定
 
ファイルを指定したときにパスワード画面になります

回答
投稿日時: 21/11/05 08:40:26
投稿者: simple

パスワードとは、読み取りパスワードのことですよね。
 
>ファイルを指定したときにパスワード画面になります
GetOpenFileNameを実行したときであるというのは、
どのようなことを根拠にされていますか?どうやって確認されましたか?
その後のファイルを開く動作のなかで警告が出ているのではないのですか?
 
また、実際に実行しているコードの
プロシージャ全体を省略せずに(つまり、Sub から End Subまでを)
あたらめて提示されたほうが間違いないと思います。

投稿日時: 21/11/05 08:59:43
投稿者: TRACK&FIELD

初心者のマクロです
 
何をする目的かというと、陸上競技の審判の参加許諾を、個人ファイルから一覧ファイルに読み込むことが目的です。
ただし、個人ファイルには読み取り用のパスワードがかかっており、役500程度のデータではありますが、毎回パスワードを入れるのが面倒なため、読み込み陽のマクロを考えた次第です。
 
F8を押しながら実行していくと、ファイルを指定したときに コピー〜(ファイル名)がパスワードを要求します。キャンセルして、指定したファイルを開くで実行できます。
初心者のマクロですが、すべてあげてみます。よろしくお願いします。
 
Private Sub CommandButton2_Click()
'ファイルを開く
 
    Dim sinpan As String
    Dim n As Integer
    Dim rc As Integer
     
      ' ChDir "E:\Work"
        sinpan = Application.GetOpenFilename("Excel, *.xls?")
         
                If sinpan <> "False" Then
                        Workbooks.Open sinpan, Password:="2021rikujousinpan"
                Else
                        MsgBox "キャンセルされました"
                End If
         
        'Workbooks.Open sinpan, Password:="2021rikujousinpan"
 
  '個人データの一覧のコピー
   
        Workbooks(2).Activate
                Sheets(3).Select
         
 
    Range("f3:fb3").Select
          Range("A3:fb3").Select
                Selection.Copy
           
  '個人データの台帳への貼り付け
   
  Workbooks(1).Activate
                Sheets(1).Select
                        n = Cells(Rows.Count, "B").End(xlUp).Row + 1
                                Range("B" & n).Select
         
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
 
                        n = Cells(Rows.Count, "O").End(xlUp).Row
                                Range("O" & n).Select
 
           
        'Workbooks(1).Activate
                'Range("B4").Select
                        'Selection.PasteSpecial Paste:=xlPasteValues
                         
                         
    Application.Goto Reference:="sanla"
        Selection.Replace What:="1", Replacement:="○", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
 
                Application.CutCopyMode = False
         
        Range("B4").Select
 
 
    rc = MsgBox("登録票を印刷しますか?", vbYesNo + vbQuestion, "確認")
    If rc = vbYes Then
     
 Workbooks(2).Activate
               Worksheets(2).PrintOut
                
        Workbooks(2).Save
                Workbooks(2).Close
                        Application.DisplayAlerts = True
         
    Else
     
      '個人ファイルのクローズ
     
        Workbooks(2).Save
                Workbooks(2).Close
                        Application.DisplayAlerts = True
    End If
         
         
  
End Sub
 

回答
投稿日時: 21/11/05 09:28:43
投稿者: simple

私の手元ではそうした事象は再現できませんでした。
 
ほかの方のコメントをお待ちください。

投稿日時: 21/11/05 12:00:36
投稿者: TRACK&FIELD

simple 様
 
いろいろありがとうございます。
もう少し情報を待ってみます

回答
投稿日時: 21/11/05 12:11:29
投稿者: Suzu

sinpan = Application.GetOpenFilename("Excel, *.xls?")
 
この時点で 聞いてくる 「パスワード」とは、
エクセルファイルの 書き込み/読み取り のパスワードで間違いありませんか?
 
パスワード付きの ZIP書庫 ファイルの解凍パスワード なのではありませんか?

投稿日時: 21/11/05 13:04:23
投稿者: TRACK&FIELD

>エクセルファイルの 書き込み/読み取り のパスワードで間違いありませんか?
 
だと思います

回答
投稿日時: 21/11/05 13:28:42
投稿者: WinArrow
投稿者のウェブサイトに移動

一度
>sinpan = Application.GetOpenFilename("Excel, *.xls?")
だけのプロシジャを作成して、テストしてみましょう。
 
これでパスワードを聞いてきますか?

回答
投稿日時: 21/11/05 14:42:03
投稿者: Suzu

引用:
>エクセルファイルの 書き込み/読み取り のパスワードで間違いありませんか?
  
だと思います

 
引用:
sinpan = Application.GetOpenFilename("Excel, *.*")
  
この時点パスワードを聞いてきます
  
キャンセルをするとファイルを開く画面に再度戻りますので、そこでファイルを選ぶと次に進んでいきます。

 
コードは、
sinpan = Application.GetOpenFilename("Excel, *.*")
sinpan = Application.GetOpenFilename("Excel, *.xls?")
 
どちらでしょう?
 
この時点のダイアロは
左上に エクセル マークが表示され、その横に 「ファイルを開く」 というダイアログで
ボタンとして、「開く」「キャンセル」があります。
フィルターが、*.xls? であれば、ZIPファイルは選択できませんでしたね。
 
*.* だった場合
 現在手元 は、ZIPが ユーティリティーソフトに関連づいていて
 ダイアログ にて、ZIP ファイルを 選択の上、ダブルクリックだと ZIPファイルパスが返るだけ
 ダイアログの 左側のツリーから、ZIPファイルを選択しても、ZIPにパスワードがついていると
  圧縮(ZIP形式)フォルダエラー フォルダを開くことができません。
   旨のメッセージが発生 しますので
 
 
引用:
パスワード付きの ZIP書庫 ファイルの解凍パスワード なのではありませんか?

 では ありませんでしたね。 すみませんでした。
 
【1】-------------------------------------------------------------------------------------
引用:
キャンセルをするとファイルを開く画面に再度戻りますので

との事なので、バックグランドに 「ファイルを開く」が存在しており
 さらに その上 に、パスワードの問い合わせ が出ていますね。
 
その ファイルがあるのは、ネットワーク上の 共有フォルダなどの パスワード付きのフォルダ
であり、そのフォルダ の パスワードの問い合わせ ではありませんか?
 
パスワード を聞いてきている メッセージを提示ください。
 
 
 
【2】-------------------------------------------------------------------------------------
1. Excel アプリケーションを起動
2. GetOpenFilename メソッドと同じフォルダを エクスプローラー にて開く
2. エクスプローラー上の開きたいファイルを ドラック&ドラップ で Excel上にドロップ
   ↓
   ここでパスワードの問い合わせがあるはずです。
 
上記を手動にて行い、どこのステップ で パスワードの問い合わせが来ますか?

回答
投稿日時: 21/11/05 18:00:02
投稿者: WinArrow
投稿者のウェブサイトに移動

コードの件ですが、
 
> MsgBox "キャンセルされました"
のあと、
Exit Sub
を記述しないと、次のコードを実行してしまいます。
ここでは、ファイルを開いていないので、
開いていないブックをアクセスすることになり、勿論エラーになります。
 
ところで
Workbooks(2).Activate
のようなIndexで指定せず、
> Workbooks.Open

Set wbk = Workbooks.Open(・・・・)
に変えた方がわかりやすくなります。

投稿日時: 21/11/05 18:16:08
投稿者: TRACK&FIELD

皆様ありがとうございます
 
サブコンピュータでは質問したエラーが出ずに普通に動作できました。