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이 될 수는 없습니다. –