過去ログ

                                Page     211
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼表作成の描画時  rin-bon 02/10/16(水) 11:14
   ┗Re:表作成の描画時  yu-ji 02/10/16(水) 11:31
      ┗Re:表作成の描画時  rin-bon 02/10/16(水) 12:26
         ┗ScreenUpdatingが自動的にTrueになる  yu-ji 02/10/16(水) 16:03
            ┗Re:ScreenUpdatingが自動的にTrueになる  rin-bon 02/10/16(水) 20:09

 ───────────────────────────────────────
 ■題名 : 表作成の描画時
 ■名前 : rin-bon
 ■日付 : 02/10/16(水) 11:14
 -------------------------------------------------------------------------
   こんにちは。
また、悩んでいます。。。

今、VBAで表作成をしています。
一つ一つの関数毎に、題を出力する関数、線をひく関数、体裁を整える関数、
色を付ける関数等に分けています。
それで、表作成にけっこう時間がかかってしまうのですが、その描画の最中に
シートを見えなくしてしまう方法はないでしょうか?

Sheets("NEW").visible = false では、他のシートが見えてちらちらするので、
なんか気持ち悪いのです・・・。
他に良い方法はないでしょうか?

あと、表作成中にシートが見えず、しかも作成時間が長いとほんとにちゃんと
作成されているのかなと不安になったりするのですが、
なにか良い方法はないでしょうか?
 ───────────────────────────────────────  ■題名 : Re:表作成の描画時  ■名前 : yu-ji  ■日付 : 02/10/16(水) 11:31  -------------------------------------------------------------------------
   ▼rin-bon さん:
>
>Sheets("NEW").visible = false では、他のシートが見えてちらちらするので、
>なんか気持ち悪いのです・・・。
>他に良い方法はないでしょうか?

Application.ScreenUpdating = False
処理
Application.ScreenUpdating = True

とすると、画面更新を止めれます。
また、画面更新をしないですむ為、処理時間も短くなりますよ。


>あと、表作成中にシートが見えず、しかも作成時間が長いとほんとにちゃんと
>作成されているのかなと不安になったりするのですが、
>なにか良い方法はないでしょうか?

簡単なので、ステータスバーに表示というのはどうでしょうか?

oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
Application.StatusBar = "しばらくお待ちください..."
処理
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar


それぞれの詳細はScreenUpdatingとStatusBarのヘルプを確認してみてください。
 ───────────────────────────────────────  ■題名 : Re:表作成の描画時  ■名前 : rin-bon  ■日付 : 02/10/16(水) 12:26  -------------------------------------------------------------------------
   ▼yu-ji さん:
早速の回答ありがとうございます。

>Application.ScreenUpdating = False
>処理
>Application.ScreenUpdating = True
>
>とすると、画面更新を止めれます。
>また、画面更新をしないですむ為、処理時間も短くなりますよ。
>
すごいです。ほんとちらつきもしなくなるんですね。

ですが、処理の途中で、シートの追加をしたり、
NEWSheets.activate
とかやっちゃうと見えちゃうようですね・・・。

しかも、その後はずっと処理経過が見えっぱなしなんですが、
一つ一つの関数に同じ処理をするしかないですか?

>簡単なので、ステータスバーに表示というのはどうでしょうか?
>
>oldStatusBar = Application.DisplayStatusBar
>Application.DisplayStatusBar = True
>Application.StatusBar = "しばらくお待ちください..."
>処理
>Application.StatusBar = False
>Application.DisplayStatusBar = oldStatusBar
>

ありがとうございます。完璧です。m(__)m
 ───────────────────────────────────────  ■題名 : ScreenUpdatingが自動的にTrueになる  ■名前 : yu-ji  ■日付 : 02/10/16(水) 16:03  -------------------------------------------------------------------------
   ▼rin-bon さん:
>ですが、処理の途中で、シートの追加をしたり、
>NEWSheets.activate
>とかやっちゃうと見えちゃうようですね・・・。
>
>しかも、その後はずっと処理経過が見えっぱなしなんですが、
>一つ一つの関数に同じ処理をするしかないですか?

とりあえず、一連のVBAの処理が終了した時には自動的にTrueに戻る
ようですが。
上記に書かれたように、シートの追加やシートをActiveにするなどでは
Trueにはならないはずです。
#こちらで確認しても再現できませんでした。(Win98、Excel2000)

途中で一度VBAの処理が終了をしていたり、ScreenUpdatingをTrueにするコード
を実行していないですか?(ブレイクポイントをTrueにする全ての行に置いて、
その行でブレイクしないか確認してみてください。)
 ───────────────────────────────────────  ■題名 : Re:ScreenUpdatingが自動的にTrueになる  ■名前 : rin-bon  ■日付 : 02/10/16(水) 20:09  -------------------------------------------------------------------------
   すみません・・・。

trueにしているところがありました。
直したらいい具合に動きましたぁ〜!!

もう、完璧です!!
って、また不具合出たりして...。

でも、めげませんよぉ〜!!

ほんっとありがとうございました。v(^^)v
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 211