IクラスClient
の100 000
オブジェクトを作成するプログラムは、各Client
異なる乱数を割り当てるたびに100
回を配列に入れますし、その配列を経由する必要がありエクセルVBA:プログラムは、ステータスバーが更新された場合には時間がかかる
メインサブ:
Sub start()
Dim i As Long
Dim j As Long
Dim clientsColl() As Client
ReDim clientsColl(1 To 100000) As Client
For j = 1 To 100000
Set clientsColl(j) = New Client
clientsColl(j).setClientName = "Client_" & j
Application.StatusBar = "Getting client " & j
DoEvents
Next
Dim tempCount As Long
Dim clientCopy As Variant
For i = 1 To 100
tempCount = 0
For Each clientCopy In clientsColl
tempCount = tempCount + 1
clientCopy.generateRandom
'Application.StatusBar = "Calculating " & i & ": " & tempCount & "/" & 100000 '(1)
'DoEvents
Next
Application.StatusBar = "Calculating " & i
DoEvents
Next
MsgBox ("done")
End Sub
Client
クラス:
Option Explicit
Dim clientName As String
Dim randomNumber As Double
Public Sub generateRandom()
randomNumber = Rnd()
End Sub
Public Property Get getClientName()
getClientName = clientName
End Property
Public Property Let setClientName(value As String)
clientName = value
End Property
スルー機能
問題は、実行時間が行(1)
がコメントアウトされているかどうかによって異なります。実行された場合、ステータスバーは更新されますが、実行時間は非常に遅いです。それが実行されない場合、プログラムは本当に速く完了します。
どうしてですか?
あなたは 'Application.ScreenUpdating'と' Application.StatusBar' 'Application'プロパティに精通していますか? – AntiDrondert
@AntiDrondert 'Application.ScreenUpdating = False'マクロを' start'マクロに追加しようとしましたが、速く動作しているようですが、内部ステータスバーが更新されるとマクロが遅くなるという根本的な問題があります。 – Ans
"基本的な問題:内部のステータスバーが更新されても、マクロはまだ遅いです":ステータスバーの更新に必要な時間は0になると思いますか?確かに0にすることはできません。 –