
質問タイトルの通りですが、詳しく書くと↓
<やりたいこと>
ある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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAで今開いているユーザ...
-
エクセルVBA Workbook変数に変...
-
フォルダ内の全ブックのシート...
-
VB2010でExcelの行をコピーして...
-
コマンドボタンでマクロを起動...
-
すでに開いているブックのマク...
-
【ExcelVBA】指定の書式で、マ...
-
【Excel VBA】ブックを複数開い...
-
フォルダ内の全てのBookに同じ...
-
excelマクロ、任意セルの値で名...
-
エクセルのマクロについて教え...
-
エクセル2007で、Application.R...
-
VBA、Excelのworkbook.open に...
-
複数のデータ系列の線の太さを...
-
エクセルでツールバーに「縮小...
-
VBAを一度起動するとずっと出て...
-
Powerpointでランダムな数字の...
-
コピーしたファイルのマクロを...
-
マクロを消すマクロは不可能?
-
excelファイルに使われているVB...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAで今開いているユーザ...
-
フォルダ内の全ブックのシート...
-
エクセルVBA Workbook変数に変...
-
VB2010でExcelの行をコピーして...
-
フォルダ内の全ブックのシート...
-
【ExcelVBA】指定の書式で、マ...
-
EXCELマクロでxlsとxlsxを開く方法
-
excelマクロ、任意セルの値で名...
-
【Excel VBA】ブックを複数開い...
-
すでに開いているブックのマク...
-
フォルダ内の全てのBookに同じ...
-
VBA セル入力された日付データ...
-
VBAでEXCELのワークシートを削...
-
VBA、Excelのworkbook.open に...
-
Excel VBAを後ろで動かす方法
-
[Excel VBA] フォルダ内の複数...
-
EXCEL VBA起動時の処理
-
excelでハイパーリンク 別ブッ...
-
エクセルVBAでブックを開くと処...
-
他のBookのユーザー定義関数を使う
おすすめ情報
コードの例をありがとうございます。
実行結果は、同様でした。
>思うような動作にならず・・・
というのは、マクロを実行しても複数のパスワード付ブックのうち、なぜか1つしか開かないためです。
PC環境の問題なのか、考えたコードでは、もともと無理なのか・・・?