[[20150126153953]] 『複数の保護せれたシートの列行の表示、非表示を一』(take) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数の保護せれたシートの列行の表示、非表示を一括作業』(take)

保護せれたシートの列行の表示、非表示を下記のように作りました。
それを複数(指定)のシート[?@あ ?Aい・・・?Sそ]を一括作業したいのですが
わからないです。
教えて下さい、宜しくお願いします。

Sub 列を非表示にする()

   ActiveSheet.Unprotect

   Columns("J:L").Select
   Selection.EntireColumn.Hidden = True

   ActiveSheet.Protect
 End Sub

 Sub 列を再表示する()
   ActiveSheet.Unprotect

   Columns("J:L").Select
   Selection.EntireColumn.Hidden = False

   ActiveSheet.Protect
 End Sub

 Sub 行の非表示()
    Dim c As Range

    ActiveSheet.Unprotect

    For Each c In Range("A5:A35")
        If WorksheetFunction.CountA(c.EntireRow.Range("J1:L1")) = 0 Then c.EntireRow.Hidden = True
    Next

    ActiveSheet.Protect
 End Sub

 Sub 行の全表示()
    ActiveSheet.Unprotect

    Range("A5:A35").EntireRow.Hidden = False

    ActiveSheet.Protect
 End Sub

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 ・複数(指定)のシート[?@あ ?Aい・・・?Sそ]

 この意味がちょっとわからないなぁ。

 ・一括作業

 シートの行の表示・非表示を一括作業したいのか、シートのUnprotect、Protect を一括処理したいのか
 それもわからないなぁ。

 ところで、保護されたシートは、通常はさわれないので Unprotect するわけだけど、
 人間の操作では保護されていて、さわれないけど、マクロからは、Unprotectしなくても平気でさわれる
 方法がありますが、もし、それができれば解決ですか?

 VBA UserInterfaceOnly あたりでググると、解説ページがたくさんあります。
 これ(マクロからはOKの保護)をWorkbook_Open あたりで必要なシートに対して設定しておくことで
 毎回の Unprotect/Protectは必要なくなります。ご参考まで。

 それと、ActiveSheet.Protect
 シート保護をしようとしたとき、操作者に許可する操作がたくさん出てきて、それを選ぶわけだけど、
 マクロで Protectメソッドを使う場合、それぞれの機能を許可するかどうか、指定が必要。
 指定なければ、各機能に対するDefault設定が採用される。それでよければいいんですが?
 何がDefaultなのかは、たとえば

https://msdn.microsoft.com/ja-jp/library/cc390352.aspx

(β) 2015/01/26(月) 16:03


いつもお世話になります。
毎度、説明が下手で申し訳ないです。
[?@あ ?Aい・・・?Sそ]はシート名[(1)あ (2)い・・・(20)そ]です
まず、シートの行の表示・非表示を一括作業がしたいです。
(take) 2015/01/26(月) 16:27

 じゃぁ、まず今あるマクロを以下のように変更。

 Sub 列を非表示にする(sh As Worksheet)

   sh.Unprotect

   sh.Columns("J:L").EntireColumn.Hidden = True

   sh.Protect

  End Sub

  Sub 列を再表示する(sh As Worksheet)

   sh.Unprotect

   sh.Columns("J:L").EntireColumn.Hidden = False

   sh.Protect

  End Sub

  Sub 行の非表示(sh As Worksheet)
    Dim c As Range

    sh.Unprotect

    For Each c In sh.Range("A5:A35")
        If WorksheetFunction.CountA(c.EntireRow.Range("J1:L1")) = 0 Then c.EntireRow.Hidden = True
    Next

    sh.Protect

  End Sub

  Sub 行の全表示(sh As Worksheet)

    sh.Unprotect

    sh.Range("A5:A35").EntireRow.Hidden = False

    sh.Protect

  End Sub

 で、列の非表示の一括タイプのみ、サンプルとして(そのほかも同様の要領で)
 Arrayの中身は必要なだけ追加。

 Sub 列非表示一括()
    Dim shn As Variant

    For Each shn In Array("(1)あ", "(2)い", "(20)そ")
        列を非表示にする Sheets(shn)
    Next

 End Sub

(β) 2015/01/26(月) 16:48


大変、助かりました!
まだ、やりたい事はありますがググッても分からない時はお願いします。
ありがとうございました!
(take) 2015/01/26(月) 17:27

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.