[[20111221141527]] 『VBAでのグラフの再描画』(とん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでのグラフの再描画』(とん)
 winXPSP3・Excel2007

 ・やりたい事。VBAでグラフの元データ範囲を移動して
 簡易アニメーションのようにする。

 対象は2列一組で「X・Y」の値の入ったデータです。
 A列〜任意に数値が入っています。
 下記データは=rand()で入れてます。

      |[A]     |[B]     |[C]     |[D]     |[E]     ・・・
  [1] |X       |Y       |X       |Y       |X       
  [2] |0.508313|0.935429|0.282401|0.971517|0.749494
  [3] | 0.55495|0.841119|0.702525|0.879678|0.621428
 ・・・
  [10]|0.489698|0.167245|0.898965|0.115941|0.083925

 A1:B10でデフォルトの散布図を作成し、
 XYの軸の最小値・最大値だけ固定します。(0・1)

 で、下記コードで横にずらしていくんですけど
 Application.ScreenUpdatingなしだと、終了するまで
 グラフが再描画されません。
 入れると、まあ当然ですが再描画時にちらつきます。
 グラフのreflashでも再描画されず、
 なにかなめらかに再描画されるものが無いかと探してますが
 探しきれませんでした。
 ご存知のかた、ご教示いただけないでしょうか。

Option Explicit

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()

Dim tmpX As Long, tmpY As Long

With ActiveChart

    .SeriesCollection(1).XValues = "=Sheet1!R2C1:R10C1"
    .SeriesCollection(1).Values = "=Sheet1!R2C2:R10C2"
End With

For tmpX = 3 To Cells(1, Columns.Count).End(xlToLeft).Column Step 2

    tmpY = tmpX + 1

'Application.ScreenUpdating = False

    With ActiveChart
        .SeriesCollection(1).XValues = "=Sheet1!R2C" & tmpX & ":R10C" & tmpX
        .SeriesCollection(1).Values = "=Sheet1!R2C" & tmpY & ":R10C" & tmpY
        .Refresh
    End With
'Application.ScreenUpdating = True
        Sleep 1000

Next tmpX

MsgBox ("終わったよん")
End Sub


 Sleepの前にDoEventsを2回いれてみて
 (SoyJoy)

 おお〜〜!!描画されました。

 調べたみたら、OSに処理を渡すみたいですね。
 なんで二回?とかわからない部分があるのでちょっと調べてみます。

 SoyJoyさん、ありがとうございました!
(とん)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.