保護ビューのBookに対し操作したい
ダウンロードしてきたエクセルを開くと保護ビューで開かれて、ActiveWorkbookなどを利用しているマクロが利用できなかった。
保護ビューで開かなければ良いだけなのだけど、それを変えるのも面倒なのでActiveWorkbook部分などのマクロを修正した備忘録になります。
エラーになった箇所
ActiveWorkbook
↓だとActiveWorkbookが取得できずエラーに
修正前.vb
For Each targetSheet In ActiveWorkbook.Sheets
' なんらかの処理
Next targetSheet
↓ProtectedViewWindowsを利用して、保護ビューでもActiveWorkbookと同じようにする。
修正後1.vb
For Each targetSheet In Application.ProtectedViewWindows(1).Workbook.Sheets
' なんらかの処理
Next targetSheet
↓保護ビューでないBookのとき用に条件を入れておく
修正後2.vb
Dim targetSheet As Worksheet
If ActiveWorkbook Is Nothing Then
' ActiveWorkbook がNothingの場合、保護ビューで開かれていると仮定して、Bookを取得
Set targetBook = Application.ProtectedViewWindows(1).Workbook
Else
Set targetBook = ActiveWorkbook
End If
For Each targetSheet In targetBook.Sheets
' なんらかの処理
Next targetSheet
(保護ビュー以外で、ActiveWorkbook がNothingの場合は検討してません。。)
Workbooks(TARGET_BOOK_NAME).Activate Sheets(resultListBox.Value).Select
↓の様な箇所があってシートを選択しようとした部分でエラー
修正前.vb
TARGET_BOOK_NAME = "something"
TARGET_SHEET_NAME = "something"
’ {中略}
Workbooks(TARGET_BOOK_NAME).Activate
Sheets(TARGET_SHEET_NAME).Select
ProtectedViewWindowsを利用
修正後1.vb
Application.ProtectedViewWindows(TARGET_BOOK_NAME).Workbook.Activate
Application.ProtectedViewWindows(TARGET_BOOK_NAME).Workbook.Sheets(TARGET_SHEET_NAME).Select