[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数のシートを一度の操作でズーム変更する方法はありますか』(新米事務員)
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.