[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数のシートを一度の操作でズーム変更する方法はありますか』(新米事務員)
Sub 全シート()
Dim ws As Worksheet
For Each ws In Worksheets
倍率 = 70
ActiveWindow.Zoom = 倍率
Next
End Sub
以前の似たものでこんなコードを書いてみたのですが動かない。。。
Excel2003,WindowsXP,
せっかくループしているのに アクティブウィンドゥに対して 処理している。
ループの中で変数のシートをアクティブにして 処理する。 「倍率」はループの外に出す。 画面の再描画停止・再開をする シートのActivateを行うので初期のアクティブシート を記憶しておく
Dim ws As Worksheet
Dim acws As Worksheet
Dim 倍率 As Integer
Set acws = ActiveSheet
倍率 = 70
Application.ScreenUpdating = False
For Each ws In ActiveWorkbook.Worksheets
ws.Activate
ActiveWindow.Zoom = 倍率
Next ws
acws.Activate
Set acws = Nothing
Application.ScreenUpdating = True
(カリーニン)
これでとても楽に仕事が出来ます。 ありがとうございました。(新米事務員)
解決のようですが、コードが冗長すぎませんか? 以下のかんじでは...
Worksheets.Select ActiveWindow.Zoom = 70 ActiveSheet.Select (sasa)
横から失礼します。
sasaさんのコードの最後の
>ActiveSheet.Select
これはどのようなことを行っているのでしょう?
私が試行した限りでは一番左のシートが選択されてしまいました。 一方、カリーニンさんのコードではコード実行後にコード実行前の アクティブシート が選択されました。
(松金徒手)
sasaさんありがとう自分も、カリーニンさんのコードみたいに各シートをセットしていくのかと、思いましたが、 Worksheets.Selectで、全部のシートを選択が、思いつきませんでした。 >ActiveSheet.Selectは、全部のシートを選択されているのを、あくちぇぶシートを選択としていると思います。F8で、ひとつずつ確認すると、良くわかります (beginner)
Worksheets.Select で Active なシートが変わってしまうので、変更前の保存は必要でしょうね。 あまり冗長さを問うような処理の規模ではないと思いますが、
Dim acws As Worksheet
Set acws = ActiveSheet
Worksheets.Select
ActiveWindow.Zoom = 70
acws.Select
くらいでしょうか。 (Mook)
>Worksheets.Select >で Active なシートが変わってしまうので、変更前の保存は必要でしょうね。
Activeなシートが変わらないようには以下ですね。
Worksheets.Select False ActiveWindow.Zoom = 70 ActiveSheet.Select (sasa)
Active なシートが変わってしまうのでとは、どういうことでしょうか? 初歩的なことで、申し訳ございません。 (beginner)
Worksheets.Selectは、一番左sheetをActiveにしちゃうのでしたね。失礼しました& Worksheets.Select 0 で、了解しました。 (beginner)
sasaサンのコードがシンプルなので試したのですがエラーがでます。 Worksheets.Select False ActiveWindow.Zoom = 70 ActiveSheet.Select
実行時エラー '1004': 'Select'メソッドは失敗しました:'Select'オブジェクトと出ているのですが何故でしょうか?
非表示のシートがあったりしない? (春日野馨)
ドンピシャです。 非表示のシートがある時は一度表示して消さないとダメでした。
非表示シートを一度再表示して処理、シートを再度非表示、 とした場合の処理です。sasaさんのコードに追加(一部変更)してみました。
複数のシートを一括で非表示にすることは出来ましたが、 非表示シートを一括で再表示することは出来ないようです。 (検証不足かもしれません)
また、非表示シートの有無は一括で取得できないようです。 (これも検証不足かもしれません) ですのでループで取得しました。
Sub testC()
Dim hdshtary() As Variant
Dim hdshtcnt As Integer
Dim ws As Worksheet
Dim acws As Worksheet
hdshtcnt = -1
'↓の※のためアクティブシートを取得
Set acws = ActiveSheet
Application.ScreenUpdating = False
For Each ws In Worksheets
'非表示シートがあったら
If ws.Visible = xlSheetHidden Then
'変数をカウントアップ
hdshtcnt = hdshtcnt + 1
'配列を拡張
ReDim Preserve hdshtary(hdshtcnt)
'シート名を配列に格納
hdshtary(hdshtcnt) = ws.Name
'シートの表示・非表示切り替え
ws.Visible = Not ws.Visible
'ws.Visible = True 'でも可
End If
Next ws
Worksheets.Select False
ActiveWindow.Zoom = 70
'当初の非表示シートを再度非表示にする
If hdshtcnt <> -1 Then Worksheets(hdshtary).Visible = False
' ActiveSheet.Select '※何故か当初のアクティブシートとは違うシートがアクティブになることがあるので↓を使用
acws.Select
Application.ScreenUpdating = True
Set acws = Nothing
Erase hdshtary
End Sub
カリーニンさんご提示のコードだと、非表示シートがあっても関係なくZoom変更が出来ました。 今回の私のコードは非表示シートを再表示するのにループ処理を行っているので、どうせループするなら 回りくどいことをせずにループでZoom変更するのが手っ取り早そうです。
非表示シートが無いならsasaさんのコードですね。
表示シートのみZoom変更する場合はループ処理になりそうです。
(松金徒手)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.