[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/10/24(Mon) 11:52
投稿者名:ダンボ
URL :
タイトル:
Excel2002のイメージRefresh
Excel2002のVBAで、プログレスバーを画面に表示しようとして下記ルーチンを実行しました。
動作は正しいのですが、2つのイメージがRefreshされません。マクロを中断すれば正しい
進捗状況で2つのイメージが表示されます。コメント部を解除するとキャプションは進捗状況
に合わせて変化表示されていくので、イメージのRefreshだけができていないようです。
ユーザフォームまたはイメージにRefresh命令があればよいのですが、それは無いようです。
どうしたら、画面更新しますでしょうか?(他のプログレスバーOCXを使うという解は無しで)

Public Function ShowProgress(Past As Integer, Total As Integer)
Select Case Past
Case Is = 0
   frmProgress.imgPast.Width = 0
   frmProgress.Show 0
Case Is = Total
   frmProgress.Hide
Case Is > Total
Case Is < 0
Case Else
'  frmProgress.Caption = frmProgress.Caption & Past
   frmProgress.imgPast.Width = Past * frmProgress.imgTotal.Width / Total
'  ここに強制的にRefreshする処理があると良いと思う
End Select

投稿時間:2005/10/25(Tue) 17:38
投稿者名:るしぇ
Eメール:
URL :
タイトル:
Re: Excel2002のイメージRefresh
とりあえず、DoEvents 関数があるので制御をOSに戻してみるとか。
ただし、描画以外のイベントが処理される場合もあるから、再描画
だけで済ましたい場合はやっぱり Refresh 系を探してみたい所では
ありますね。

…で、frmProgress が UserForm で imgPast や imgTotal が
イメージ (Image) コントロールと仮定して、イメージコントロールに
それらしいメソッドは確かに無かったけど、UserForm には Repaint
メソッドってのがあるね。

あとは標準で表示されているコントロール以外の Refresh 系を
備えた[その他のコントロール]の参照を追加して使ってみるとかに
なってしまうと思うけど
>他のプログレスバーOCXを使うという解は無しで
理由は?プログレスバー以外なら良いの?w

投稿時間:2005/10/25(Tue) 17:59
投稿者名:neptune
Eメール:
URL :
タイトル:
Re: Excel2002のイメージRefresh
こんちは

FrameにはRepaintがあるのでFrameの上にImageを乗せてFrameをRepaintすればいけますよ。
私は2000しか持ってないですけどね。
> Case Else
> '  frmProgress.Caption = frmProgress.Caption & Past
>    frmProgress.imgPast.Width = Past * frmProgress.imgTotal.Width / Total
> '  ここに強制的にRefreshする処理があると良いと思う
   ここでFrameをRepaintすればImageもRepaintされます。2Kで検証済み
> End Select

投稿時間:2005/10/25(Tue) 18:36
投稿者名:ダンボ
URL :
タイトル:
[解決]Excel2002のイメージRefresh
るしぇさん、neptuneさん、どうも有り難うございます。
まとめレスで失礼します。

後出しじゃんけんで済みませんが、ユーザフォームのRepaintは試していました。でも
リフレッシュされなかった。。。なんで?
neptuneさんご回答のフレームに載せ換えて、フレームのRepaintを発行したところ気持ちよく
リフレッシュされました。。。
お2人方どうも有り難うございました。

   frmProgress.imgPast.Width = Past * frmProgress.imgTotal.Width / Total
   frmProgress.fraProgress.Repaint
'   frmProgress.Repaint