質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

2111閲覧

マクロでブック&シート保護したファイルを別マクロで開こうとするとWorkbooks.Open実行でフリーズが発生する

hoge_hoge_

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2019/08/27 04:47

編集2019/09/02 03:02

前提・実現したいこと

前提:
①別マクロでブックとシートの保護をする
②保存先にフォルダ(フォルダ名はファイル名と同じ)を作成し、①を格納する
実現したしたいこと:
前提で作成したファイルを別マクロで開く

発生している問題・エラーメッセージ

発生している問題:別マクロのWorkbooks.Open実行でフリーズが発生
※エラーメッセージなし

初めての投稿で至らぬ点もあるかもしれませんが、困っています。
もしおかしなところがあればご教示いただけないでしょうか、
宜しくお願いいたします。

該当のソースコード

簡略していますが、一度ブック&シート保護したファイルをファイル名と同じ名前のフォルダに格納し、別マクロで保護したブックを開こうとしています。

VBA

1【シート保護マクロ】 2Sub test() 3 'PW 4 Dim book_password As String: book_password = 1 5 Dim sheet_password As String: sheet_password = 2 6 7 'ファイル保存先 8 Dim save_path As String: save_path = "C:\保存先" 9 10 '保護するファイル格納先 11 Dim folder_path As String: folder_path = "C:\保護するファイル" 12 13 'ファイル名取得 14 Dim file_name As String 15 file_name = Dir(folder_path & "\" & "*.xlsm") 16 17 Do While file_name <> "" 18 Workbooks.Open folder_path & "\" & file_name 19 20 Workbooks(file_name).Sheets(1).Activate 21 Range("A:AK").Locked = True 22 Range("A2:AK2").Locked = Flase 23 24 'シート保護 25 ActiveSheet.Protect Password:=sheet_password, UserInterfaceOnly:=True 26 ActiveSheet.EnableSelection = xlUnlockedCells 27 28 Workbooks(file_name).Sheets(2).Activate 29 Range("A:AA").Locked = True 30 Range("A5:H22").Locked = Flase 31 32 'シート保護 33 ActiveSheet.Protect Password:=sheet_password, UserInterfaceOnly:=True 34 ActiveSheet.EnableSelection = xlUnlockedCells 35 36 'リンク更新確認メッセージなし 37 ActiveWorkbook.UpdateLinks = xlUpdateLinksNever 38 39 'ファイル保存先に保存 40 ActiveWorkbook.SaveAs Filename:=save_path & "\" & file_name, Password:=book_password 41 Workbooks(file_name).Close 42 43 file_name = Dir() 44 Loop 45End Sub 46【ファイルオープンマクロ】 47Sub file_open() 48 Dim save_path As String: save_path = "C:\保存先" 49 Dim book_password As String: book_password = 1 50 51 'ファイルシステムオブジェクト設定 52 Dim fso As Object: Set fso = CreateObject("scripting.filesystemobject") 53 54 Dim folder As Variant 55 For Each folder In fso.getfolder(save_path).subfolders 56 Workbooks.Open folder.Path & "\" & folder.Name & ".xlsm", Password:=book_password 57 Next 58End Sub 59

試したこと

・手動では問題なくファイルが開くことを確認
・一度手動でブックの保護&シートの保護を解除したファイルはマクロで開くことが出来ることを確認

補足情報(FW/ツールのバージョンなど)

OS:Windows7
office:Excel2013

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2019/08/27 10:31

質問のコードはいくつか不備があり、そのまま実行できません。実行可能なコードへ修正お願いします。 ※先頭の「sun test()」など
hoge_hoge_

2019/09/02 03:03

ご指摘ありがとうございます。コードを修正致しました。
guest

回答1

0

ベストアンサー

フリーズが起きる場合というのは、ループが無限に回っていることが多いので、ループ付近のコードが合っているか確認してみると良いと思います。
一応以下のfile_open()コードでパスワードで保護したブックを正常に開くことが出来ます。

vba

1Sub makeprotect() 2 'PW 3 Dim book_password As String: book_password = "1" 4 5 'ファイル保存先 6 Dim save_path As String: save_path = "保存先アドレス" 7 8 '保護するファイル格納先 9 Dim folder_path As String: folder_path = "保護するファイルアドレス" 10 11 'ファイル名取得 12 Dim file_name As String 13 file_name = Dir(folder_path & "*.xlsm") 14 15 'フォルダ内をループ 16 Do While file_name <> "" 17 Workbooks.Open folder_path & "\" & file_name 18 'ブックの保護+ファイル保存先に保存 19 ActiveWorkbook.SaveAs Filename:=save_path & "\" & file_name, Password:=book_password 20 Workbooks(file_name).Close 21 file_name = Dir() 22 Loop 23End Sub 24'==================================================================== 25Sub file_open() 26 'PW 27 Dim book_password As String: book_password = "1" 28 29 'ファイル保存先 30 Dim save_path As String: save_path = "保存先アドレス" 31 32 'ファイル名取得 33 Dim file_name As String 34 file_name = Dir(save_path & "*.xlsm") 35 36 'フォルダ内をループ 37 Do While file_name <> "" 38 Workbooks.Open save_path & "\" & file_name, Password:=book_password 39 file_name = Dir() 40 Loop 41End Sub 42

投稿2019/08/28 04:49

ryunenfukahi

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoge_hoge_

2019/09/02 03:04

回答ありがとうございます。一度ご教示いただいた線で調査してみます。
hoge_hoge_

2019/09/03 06:30

やはりループ付近のコードが原因でした、大変助かりましたありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問