programing

화면 업데이트의 효과

javamemo 2023. 6. 19. 21:04
반응형

화면 업데이트의 효과

저는 로컬에서 스크립트를 실행하는 것과 서버에서 스크립트를 실행하는 것 사이의 차이를 측정하기 위해 코드 실행 시간을 측정하고 있습니다.한 번은 사용하지 않도록 설정하는 것을 잊었습니다.screen updating그리고 더 자세히 생각하기 전에 깜박이는 불빛에 민감하지 않다는 것에 감사했습니다.

처음 사용하기 시작했을 때VBA저는 항상 최종 사용자가 자신의 PC가 고장날 것이라고 생각하지 않도록 하기 위해 사용된 것이라고 생각했습니다.시키기 위해 더 때 저는 것인지 만, , 시무위이것습니다했해지인한엇을저그이는것을했작신의기드의성율▁▁when▁i▁of▁▁an▁it니▁more습▁code▁for▁was▁but이▁whatstood가▁under▁into▁improving했해▁the것▁i지▁your▁reading인위▁ofiency▁effic한무저,. 하지만 효과가 얼마나 큰지.screen updating코드 실행 시간이 정말 있습니까?

화면 업데이트를 해제하면 코드가 화면 내용을 변경하는 방식으로 Excel과 상호 작용하는 경우에만 실행 시간이 달라집니다.화면의 변화량이 클수록 영향도 커집니다.게시된 다른 답변은 이를 적절하게 보여줍니다.

실행 시간을 변경할 수 있는 다른 응용 프로그램 설정은 계산 및 이벤트 처리입니다.이 코드 템플릿을 시작점으로 사용합니다(오류 처리기는 오류가 발생하더라도 하위 끝에서 이러한 속성이 다시 켜지도록 합니다).

Sub YourSub()
    On Error GoTo EH

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

    ' Code here

CleanUp:
    On Error Resume Next
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
Exit Sub
EH:
    ' Do error handling
    Resume CleanUp
End Sub

실행 속도를 훨씬 더 향상시킬 수 있는 다른 기술이 존재합니다.

가장 유용한 것은 다음과 같습니다.

  1. 하다를 .Select,Activate그리고.ActiveCell/Sheet/Workbook하십시오.대신 변수를 선언하고 할당한 후 참조하십시오.
  2. 큰 범위를 참조하는 경우, 범위 데이터를 처리하기 위해 변형 배열로 복사하고 그 결과를 다음 범위로 다시 복사합니다.
  3. 사용하다Range.SpecialCells,Range.Find그리고.Range.AutoFilter참조되는 셀 수를 제한합니다.

SO에는 이러한 기술의 많은 예가 있습니다.

만약 당신이 그 이유에 대한 상당히 극단적인 예를 보고 싶다면.ScreenUpdating중요합니다. 다음 코드를 실행하십시오.이데 Excel 2011 없이는 약 더 오래 .ScreenUpdating = false이것은 시간의 큰 차이입니다.

Sub testScreenUpdating()

    Dim i As Integer
    Dim numbSwitches As Integer
    Dim results As String

    'swap between sheets this number of times
    numbSwitches = 1000

    'keep track of time
    Dim startTime As Double
    startTime = Time

    'swap between sheets 1/2 (need both sheets or this will crash)
    For i = 1 To numbSwitches
        Sheets(1 + (i Mod 2)).Select
    Next i

    'get results
    results = "Screen Updating not disabled: " & Format(Time - startTime, "hh:mm:ss") & " seconds"
    startTime = Time

    'scenario 2 - screenupdating disabled

    Application.ScreenUpdating = False

    'swap between sheets 1/2 (need both sheets or this will crash)
    For i = 1 To numbSwitches
        Sheets(1 + (i Mod 2)).Select
    Next i

    Application.ScreenUpdating = True

    'get results for part two
    results = results & vbCrLf & "Screen Updating IS disabled: " & Format(Time - startTime, "hh:mm:ss") & " seconds"

    'show results
    MsgBox results


End Sub

에 대해 하고 있는 또 은 효율성을 높이는 방법에 대한 것입니다.Select,Selection,그리고.Activate필요한 경우는 거의 없습니다.매크로를 기록할 때는 항상 매크로를 사용하지만 실제로 코드에서 매크로를 사용해야 하는 경우는 거의 없습니다.마찬가지로, 가지로어, 것이든떤이 있는 것은 .Active제목(예:ActiveCell)는 일반적으로 셀을 선택하고 있기 때문에 코드가 느려지는 것을 나타냅니다.

셀/워크시트를 거의 항상 구체적으로 참조하여 선택을 피할 수 있습니다.예:

msgbox (Worksheets(1).Range("A1").value) 

사용자가 현재 첫 번째 워크시트에 있는지 여부에 관계없이 작동합니다.일반적인 새로운 VBA 실수는 다음과 같은 작업을 수행하는 것입니다.

Worksheets(1).Select
msgbox (Range("A1").value)

그것은 불필요한 단계입니다.

이렇게 하면 코드 런타임에 상당한 시간이 추가됩니다.

먼저 리치(영국) 포스트 #7 Here에서 쓴 대본을 사용하고 있습니다.

그것은 단순히 루프를 통해 하나의 셀에서 i의 값을 변경하는 것을 반복합니다.저는 샘플 사이즈를 10,000번 루프하고 10번 실행할 수 있도록 약간 변경했습니다.

화면 업데이트가 코드 실행 속도에 어떤 영향을 미칩니까?

실행 시간은 다음과 같습니다.Screen Updating비활성화 및 활성화됨:

Disabled    Enabled
0.61909653  2.105066913
0.619555829 2.106865363
0.620805767 2.106866315
0.625528325 2.102403315
0.625319976 2.0991179
0.621287448 2.105103142
0.621540236 2.101392665
0.624537531 2.106866716
0.620401789 2.109004449

보다시피 코드를 실행하는 데 거의 3.5배의 시간이 소요됩니다.Screen Updating비활성화되지 않았습니다.

이 두 코드 모두 스프레드시트를 '시청'하는 대신 VB 편집기의 실행 버튼을 사용하여 초과되었습니다.

코드의 시작과 끝에 있는 두 줄의 간단한 행:

Application.ScreenUpdating = False
Application.ScreenUpdating = True

그러나 실행의 효율성에 큰 영향을 미칠 수 있습니다!

참고: 분명히 다음의 장점입니다.Screen Updating여기 많은 사람들에게 잘 알려질 것이지만 이것은 초보자들에게 도움이 될 것이고 나는 그 숫자들을 보는 것이 흥미롭다고 생각합니다!

이전 답변에서 보지 못한 화면 업데이트에 대해 알아야 할 중요한 사항이 하나 있습니다.자체 테스트를 통해 화면 업데이트를 껐다가 켜는 데 약 15ms가 걸린다는 것을 알게 되었습니다(Excel Interop을 통해 C#에서 테스트됨).시간이 덜 걸리는 작업을 수행할 경우 이 점에 유의하십시오.또한 일부 루프에서는 화면 업데이트를 여러 번 켜거나 끄지 마십시오.그것은 진정한 성능 살인자가 될 것입니다.

그리고 빨리 C++를 사용하고 싶다면 (아마도 듣고 싶지 않을 것이다) 한 개의 메모가 더 있습니다.일반적으로 VBA보다 5배에서 10배 더 빠릅니다(여기서 저를 잡지 마십시오. 실제 작업에 따라 다릅니다).

오래된 스레드인 건 알지만,

  1. 세트ScreenUpdating = true하지만 예전 값으로 되돌리는 것을 기억하세요.
  2. 워크북을 변경하면 재설정됩니다.ScreenUpdating.

언급URL : https://stackoverflow.com/questions/12391786/effect-of-screen-updating

반응형