
質問タイトルの通りですが、詳しく書くと↓
<やりたいこと>
あるExcelファイル(Aとする)でマクロを有効にした時に、自動で、Aと同じフォルダにある複数のパスワード付ブックを読み取り専用で開く。
<条件?>
・同じフォルダに複数のパスワード付ブックがある。(ファイル名はバラバラ)
・パスワードはすべて共通。(Password=1111)
以下のようなコードを考え、ThisWorkbookに入れてみたのですが、思うような動作にならず・・・
--------------------------------------------------------------------------------------
Private Sub Workbook_Open()
Dim FileName As String
Dim OpenedBook As Workbook
Dim IsBookOpen As Boolean
FileName = Dir("*.xlsx")
Do While FileName <> ""
If FileName <> ThisWorkbook.Name Then
IsBookOpen = False
For Each OpenedBook In Workbooks
If OpenedBook.Name = FileName Then '既にブックを開いていた時の処理
IsBookOpen = True
Exit For
End If
Next
If IsBookOpen = False Then
Workbooks.Open FileName, ReadOnly:=True, Password:="1111"
End If
End If
FileName = Dir()
Loop
End Sub
--------------------------------------------------------------------------------------
どこをどのように修正したらよいのか、教えて頂けると幸いです。
No.1ベストアンサー
- 回答日時:
こんばんは。
特に、とりわけコード自体が間違っているとは思えません。
細かいことを言うなら、
If FileName <> ThisWorkbook.Name Then
とかは、一般的には、全体のループに取り込んでよいような気がしますが。後は、IsBookOpenのフラグの位置かな。
だから、こんな風にも書けるとは思いますが。
'//
Private Sub Workbook_Open()
Dim FileName As String
Dim wb As Workbook
Dim IsBookOpen As Boolean
Dim myPath As String
myPath = CurDir() & "\" 'または、ThisWorkbook.Path & "\"
FileName = Dir(myPath & "*.xlsx")
Do While FileName <> ""
For Each wb In Workbooks
If wb.Name = FileName Then
IsBookOpen = True
Exit For
End If
Next wb
If IsBookOpen = False Then
Workbooks.Open myPath & FileName, ReadOnly:=True, Password:="1111"
End If
IsBookOpen = False
FileName = Dir()
Loop
End Sub
'///
>思うような動作にならず・・・
どのような問題が発生するのですか?
もし、発生するなら、こことは別の問題ではないでしょうか。
No.2
- 回答日時:
>>思うような動作にならず・・・
>というのは、マクロを実行しても複数のパスワード付ブックのうち、なぜか1つしか開かないためです。
それは、マクロの問題ではないと思いますね。
試しに、開く所で、Debug.Print を取ってみればどうでしょうか。これで情報が得られるはずです。なお、Left(Err.Description,15)は、エラーメッセージが長いおそれがあるので、割愛するためです。
If IsBookOpen = False Then
On Error Resume Next
Workbooks.Open myPath & FileName, ReadOnly:=True, Password:="1111"
If Err() <> 0 Then Debug.Print Left(Err.Description, 15); FileName; Tab(1)
On Error GoTo 0
End If
示されたエラー表示コードを入れてみましたが、開いた時にエラー表示はありませんでした。
そこで、No.1で示された myPath = CurDir() & "\" の所を ThisWorkbook.Path & "\" に変更した所、うまく動作しました。
ちょっと意外でしたが、問題が解決したので、No.1の方をベストアンサーに選ばせていただきました。
丁寧に解説して下さりありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】ブックを複数開い...
-
ExcelVBAで今開いているユーザ...
-
EXCEL VBA起動時の処理
-
すでに開いているブックのマク...
-
EXCELマクロでxlsとxlsxを開く方法
-
エクセルVBA Workbook変数に変...
-
EXCELで日付を自動でファイル名...
-
エクセル2013vbaで、見えない名...
-
【マクロ】excelファイルを開く...
-
エクセルのストップウォッチ
-
エクセル終了時の保存確認メッ...
-
Excelマクロ ファイル名が変わ...
-
Adobe Reader を閉じる
-
Excel VBAで、実行時にsheet上...
-
エクセルの関数を使って、セル...
-
複数のデータ系列の線の太さを...
-
excelでpersonal.xlsを常に開く...
-
VBAを一度起動するとずっと出て...
-
AccessからExcelマ...
-
Excelからnotesメールを自動で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAで今開いているユーザ...
-
フォルダ内の全ブックのシート...
-
エクセルVBA Workbook変数に変...
-
VB2010でExcelの行をコピーして...
-
【ExcelVBA】指定の書式で、マ...
-
【Excel VBA】ブックを複数開い...
-
フォルダ内の全ブックのシート...
-
VBAでEXCELのワークシートを削...
-
EXCELマクロでxlsとxlsxを開く方法
-
すでに開いているブックのマク...
-
フォルダ内の全てのBookに同じ...
-
他のBookのユーザー定義関数を使う
-
EXCEL VBA起動時の処理
-
excelマクロ、任意セルの値で名...
-
excelでハイパーリンク 別ブッ...
-
エクセルのブックを保存すると...
-
エクセルマクロで、他ブックの...
-
同じ名前で拡張子が違うファイル
-
エクセルのマクロでこんな風に...
-
エクセル マクロ WEBエクセル...
おすすめ情報
コードの例をありがとうございます。
実行結果は、同様でした。
>思うような動作にならず・・・
というのは、マクロを実行しても複数のパスワード付ブックのうち、なぜか1つしか開かないためです。
PC環境の問題なのか、考えたコードでは、もともと無理なのか・・・?