Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2818 / 13646 ツリー ←次へ | 前へ→

【65745】全てのシートでイベントのマクロを実行させたい みるく 10/6/24(木) 21:58 質問[未読]
【65746】Re:全てのシートでイベントのマクロを実行... 超初心者 10/6/24(木) 22:26 発言[未読]
【65747】Re:全てのシートでイベントのマクロを実行... neptune 10/6/24(木) 22:50 回答[未読]
【65770】Re:全てのシートでイベントのマクロを実行... みるく 10/6/26(土) 18:59 質問[未読]
【65776】Re:全てのシートでイベントのマクロを実行... REV 10/6/27(日) 9:39 発言[未読]
【65780】Re:全てのシートでイベントのマクロを実行... みるく 10/6/27(日) 18:23 質問[未読]
【65781】Re:全てのシートでイベントのマクロを実行... 通り魔 10/6/27(日) 18:42 発言[未読]
【65807】Re:全てのシートでイベントのマクロを実行... みるく 10/6/29(火) 1:57 お礼[未読]

【65745】全てのシートでイベントのマクロを実行さ...
質問  みるく  - 10/6/24(木) 21:58 -

引用なし
パスワード
   ウインドウズxp,エクセル2007を使用しています。

before close イベントで、以下のようなマクロを設定しています。

=============================

Private Sub Workbook_BeforeClose(Cancel As Boolean)

  On Error Resume Next
  Columns("H:J").Select
  Selection.EntireColumn.Hidden = True
  
   ActiveSheet.Protect Password:="111", DrawingObjects:=True, contents:=True, UserInterfaceOnly:=True
  
End Sub

=============================
シートが゛複数ある場合、
アクティブになっていないシートは、
H:J列が開いたまま終了されてしまいます。

アクティブになっていないシートにも、
上記のマクロが働いて、終了できるようにしたいのです。
過去ログにも同様の質問があり、参考にしましたが、
イベントではどのようにcallして良いのか分からず、
上手く行きません。

どうぞ宜しくご教示のほど、御願いいたします。

【65746】Re:全てのシートでイベントのマクロを実...
発言  超初心者 E-MAIL  - 10/6/24(木) 22:26 -

引用なし
パスワード
   >アクティブになっていないシートは、
>H:J列が開いたまま終了されてしまいます。

説明が少なすぎて、よくわかりませんが
そのファイルのシートの数を算出して(count)
全てのシートを ループ(for next)で
保護をかければ良いのでは?

>イベントではどのようにcallして良いのか分からず、

callする必要があるのですか?

【65747】Re:全てのシートでイベントのマクロを実...
回答  neptune  - 10/6/24(木) 22:50 -

引用なし
パスワード
   ▼みるく さん:
全体としては検証してませんけど、

>  On Error Resume Next
>  Columns("H:J").Select
>  Selection.EntireColumn.Hidden = True
>  
>   ActiveSheet.Protect Password:="111", DrawingObjects:=True, contents:=True, UserInterfaceOnly:=True
>シートが゛複数ある場合、
>アクティブになっていないシートは、
>H:J列が開いたまま終了されてしまいます。
原因
そのように書いているからです。
※明示的にシートの指定をしていないから。

対策1
>  Columns("H:J").Select
の親オブジェクト(シート)を明示的にしてやる
対策2
その必要もないのにActiveSheet等のように曖昧なシート指定をしているので
それを、明示的に指定してやる

シート名を取得するサンプル:
Sub t()
  Dim sName() As String
  Dim i As Long
  
  ReDim sName(Worksheets.Count - 1)
  For i = 0 To UBound(sName)
    sName(i) = Worksheets(i + 1).Name
  Next i
End Sub

>  On Error Resume Next
は必要ですか?万が一の予期せぬのエラーは無視していいんですか?
理解して使ってますか?

【65770】Re:全てのシートでイベントのマクロを実...
質問  みるく  - 10/6/26(土) 18:59 -

引用なし
パスワード
   超初心者さんへ

ご回答、ありがとうございます。
超初心者さん、ループでくくる方法は思いつきませんでした。
ただ、現状ではどのような式になるのか、分からず仕舞です。
いまあるマクロにどのように組み込めばよいか、
ご教示いただければ幸いです。

neptune さんへ

ご回答、ありがとうございます。

On Error Resume Nextは、
H:J列を開いていない状態で終了すると、
H:J列を綴じる必要が無いため、エラーメッセージがでてしまうので、
それを回避するために入れています。
万が一の予期せぬのエラーのためを考えると、
On Error GoTo 0をいれたほうが良いということでしょうか・・。

それから、おっしゃるとおり、
active sheetで限っているので、
うまくいかないことはわかっているのですが、
もともと、シートが一枚のときに組んだマクロを利用していることもあり、
そのようなコードになってしまっています。
それが、必要に応じてシートを増やすことになって、
また、シート名も内容によって後から設定していくので、
あらかじめシート名を設定できません。

For Each Ws In ThisWorkbook
というコードをネットでみつけて、トライしてみましたが、
うまくいきませんでした。

ループでくくる方法はまだ勉強不足でよく分かっていませんが、
そのような方法がべストでしょうか。

【65776】Re:全てのシートでイベントのマクロを実...
発言  REV  - 10/6/27(日) 9:39 -

引用なし
パスワード
   ▼みるく さん:
>
>For Each Ws In ThisWorkbook
>というコードをネットでみつけて、トライしてみましたが、

For Eachを使うのであれば
ThisWorkbook → ThisWorkbook.Worksheetsでよいかと^^

Inの後ろに指定するのはコレクションです☆

【65780】Re:全てのシートでイベントのマクロを実...
質問  みるく  - 10/6/27(日) 18:23 -

引用なし
パスワード
   ▼REV さん:

ご教示、ありがうとうございます。

>For Eachを使うのであれば
>ThisWorkbook → ThisWorkbook.Worksheetsでよいかと^^
>
>Inの後ろに指定するのはコレクションです☆

ということで、以下のように書き換えてみましたが、
やはり、active sheetしか機能しませんでした。

Sub Workbook_BeforeClose(Cancel As Boolean)

  Dim sh As Worksheet
  
  For Each sh In ThisWorkbook.Worksheets


  Columns("H:J").Select
 
  Selection.EntireColumn.Hidden = True
  
  Sheets.Protect Password:="123", DrawingObjects:=True, contents:=True, UserInterfaceOnly:=True
   
  Next sh
   
End Sub

どこを直すべきでしょうか。
何度も申し訳ありませんが、どうぞ宜しく御願いいたします。

【65781】Re:全てのシートでイベントのマクロを実...
発言  通り魔  - 10/6/27(日) 18:42 -

引用なし
パスワード
   >  Columns("H:J").Select
>  Selection.EntireColumn.Hidden = True

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

こうかな? 下も同じように直せばいんじゃね

【65807】Re:全てのシートでイベントのマクロを実...
お礼  みるく  - 10/6/29(火) 1:57 -

引用なし
パスワード
   ▼通り魔 さん:

ありがとうございます。

ためしてみましたが、うまくいきませんでした。

やはり、ループを勉強したいと思います。

皆様、ありがとうございました。

2818 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free