4

「Excel画面のちらつきを止めて」という長いシリーズからさらに別の質問がありますが、これはもう少し注意が必要だと思います。

マクロの実行中にスプレッドシートに「プログレス」バーを必要とするクライアントがいます。私がやったことは、進行状況に基づいて調整する2つのセルにリンクされた円グラフを作成したことです。パフォーマンスのために、を無効eventsScreenUpdatingして変更しましcalculation to manualた。

次に、たまにすばやく切り替えScreenUpdating on and offて、進行状況チャートを実際に更新します。これは私が使うたびに魅力のように機能します(現在30以上のプロジェクト)。

最近、クライアントは「大きな」問題で私に戻ってきました。クイックトグルを実行して進行状況チャートを更新するたびに、Excel画面全体(その上のすべてのアイテムを含む)がちらつき、男を夢中にさせます。

画面がちらつくことなくフロントページを常に表示(マクロがページ間をジャンプ)し続けながらチャートを更新し続けるために、これで何ができるかについて誰かが何か考えを持っていますか?ダブルバッファリングなどのようなもの...

解決

信じられないかもしれませんが、私は解決策を見つけました。これはとても簡単でした。VBAでは、残りの画面を「ロック」したまま、特定のオブジェクトだけを更新することができます。例えば:

ThisWorkbook.Worksheets("Welcome").ChartObjects(1).Chart.Refresh

ご意見ありがとうございました。

4

1 に答える 1

1

「ページ間をジャンプ」しないようにマクロを書き直すことができる場合があります(通常activate、データを操作するためにワークシートを作成する必要がないためです。それ以外の場合は、ユーザーフォームまたはアプリケーションのいずれかをStatusBar使用して進行状況を表示できます。バー:

Sub StatusBar()
Dim pct As Double
Dim msg as String
Application.ScreenUpdating = False
For i = 10000 To 1 Step -1
    pct = (10000 - i) / 10000
    msg = Format(pct, "0.0%")  & " complete"
    Application.StatusBar = msg

Next
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub

これは、UserFormを使用した修正例です。情報を表示するには、UserFormモジュールと少なくとも1つのラベルを追加する必要があることに注意してください。

Sub StatusBar()
Dim pct As Variant
DoEvents
UserForm1.Show vbModeless

Application.ScreenUpdating = False
For i = 10000 To 1 Step -1
    pct = (10000 - i) / 10000
    If Int((i / 10000) * 100) = (i / 10000) * 100 Then
        msg = Format(pct, "0%")
        UserForm1.Label1 = msg & " complete"
    End If
Next
UserForm1.Label1 = "Finished!"
Application.ScreenUpdating = True
End Sub

問題は、マクロの実行速度によっては、進行状況インジケーターが0から100%にジャンプするように見える場合があることです。グラフィカルなプログレスバーも実行できますが、その背後にある基本的な考え方は同じです。ラベル値を更新する代わりに、背景色が異なるテキストボックスのサイズを変更するなどです。

OPコメントごとに改訂

これは、「コピー/貼り付け」なしで、あるシートから別のシートに範囲を「コピー」する方法です。

Set rng1 = Sheets(1).Rows(12)
Set rng2 = Sheets(2).Rows(1)

rng2.Value = rng1.Value

したがって、範囲を定義して、2番目の範囲を最初の範囲に割り当てることができます。

于 2013-03-25T13:43:38.343 に答える