dポイントプレゼントキャンペーン実施中!

エクセルマクロにて、ルーレットを作成しました。
Googleでエクセルマクロ ルーレットで検索して一番上に出てくるコードを参考にしました。
クリップアートを挿入すると、ルーレットの動作が著しく重くなってしまいましたが。マクロに影響ってあるんでしょうか?
重たくなると言う感覚的な表現で掴みにくいかとは思いますが、何故クリップアートを複数挿入すると、マクロに影響あるかご存知の方いらっしゃいますか?

A 回答 (1件)

マクロの処理内容が不明ですが、・・・



 ※繰り返し処理の中で、毎回、クリップアートの再表示を行っていませんか?


処理中の画面更新を off にしてみては?

※処理終了後、一回だけ、画面更新をする。

この回答への補足

コードを載せます


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

Sub ROULETTE_GAME4()
'ビジュアルルーレット
Dim slpTime As Integer
Dim myRandSpan As Integer
Dim rt As Integer
Dim i As Integer
Dim bc As Integer
Dim hc As Integer
Dim myNum As Integer

'抽選範囲
myRandSpan = 10

'円グラフ範囲再設定
Range("A:A").ClearContents
For i = 1 To myRandSpan
Cells(i, 1).Value = 1
Next i

'回転数
rt = 4
'切替間隔増分
slpTime = 2
'myRandSpanが大きい場合は rt, slpTime は小さい
'値にしてください

'ベースカラー
bc = 2
'ハイライトカラー
hc = 3

'抽選
Randomize
myNum = Int(Rnd() * myRandSpan)
With ActiveSheet.ChartObjects("グラフ 2").Chart
.SetSourceData Source:=Sheets("Sheet1"). _
Range("A1:A" & myRandSpan), PlotBy:=xlColumns
.SeriesCollection(1).Interior.ColorIndex = bc

'開始位置までのハイライト移動
If myNum > 2 Then
For i = 1 To myNum - 1
Sleep slpTime
With .SeriesCollection(1)
.Points(i + 1).Interior.ColorIndex = hc
.Points(i).Interior.ColorIndex = bc
End With
DoEvents
Next i
End If

'メインルーレット
For i = 1 To rt * myRandSpan + 1
Sleep i * slpTime
With .SeriesCollection(1)
.Points(myNum + 1).Interior.ColorIndex = hc
If myNum = 0 Then
.Points(myRandSpan).Interior.ColorIndex = bc
Else
.Points(myNum).Interior.ColorIndex = bc
End If
End With
myNum = myNum + 1
myNum = myNum Mod myRandSpan
DoEvents
Next i
End With
End Sub

補足日時:2009/11/19 21:20
    • good
    • 0
この回答へのお礼

ありがとうございます。
自宅のPCにマクロが存在するので、帰宅次第、コードを載せます。画面更新の命令ってSCREENUPDATINGでしょうか?

お礼日時:2009/11/19 17:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!