우리는 응용 프로그램에 대해 특정 작업을 수행하기위한 스크립트로 사용하는 Excel 매크로를 거의 만들지 않았습니다. 각 스크립트는 여러 함수 호출을 가지고 있으며 실행 중에 이러한 함수 호출 중 일부는 응용 프로그램 관련 성능 문제로 인해 실패합니다 (예 : 창이 제대로로드되지 않았거나 창에로드하는 데 예상보다 많은 시간이 걸렸음)
이러한 응용 프로그램 성능 관련 문제가 발생하기 때문에 조용하게 자주 실행되고 우리의 실행은 항상 실패하고 있습니다. 실행 중에 매크로가 실패한 함수를 다시 실행할 수있는 코드를 스크립트에 구현할 계획입니다.
동일한 기능을 다시 실행하는 목적을 달성하기 위해 어떻게 코딩해야하는지 알려주십시오. 매크로 함수 아래에있을 경우, 예를 들어
,
호출이 경우
기능 1
기능 2
기능 3
함수 2 그때 동안 기능 2를 다시 실행하고자 실패하면 실행 시간.
주 : 여기 우리는 수 있도록 내가 실행 중에 실패 어떤 기능을 다시 실행하는 기능을 구현해야하므로 실패하는 함수를 호출 모르는 기능 1/기능 2/기능 3.런타임 동안 동일한 함수를 다시 실행하는 방법
1
A
답변
0
모든 함수가 성공 또는 실패를 나타내는 부울을 반환하도록 만든 다음 다시 테스트할지 여부를 테스트 할 수 있습니다. 무한 루프를 피하기위한 실행 카운터도 포함 된 예제가 있습니다.
Sub Master()
Dim lRunCount As Long
Const lRUNMAX As Long = 5
lRunCount = 0
Do
lRunCount = lRunCount + 1
Loop Until Function1 And lRunCount <= lRUNMAX
lRunCount = 0
Do
lRunCount = lRunCount + 1
Loop Until Function2 And lRunCount <= lRUNMAX
lRunCount = 0
Do
lRunCount = lRunCount + 1
Loop Until Function3 And lRunCount <= lRUNMAX
End Sub
Function Function1() As Boolean
Dim bReturn As Boolean
On Error GoTo ErrHandler
bReturn = True
Debug.Print "function 1 did stuff"
ErrExit:
Function1 = bReturn
Exit Function
ErrHandler:
bReturn = False
Resume ErrExit
End Function
Function Function2() As Boolean
Dim bReturn As Boolean
On Error GoTo ErrHandler
bReturn = True
'simulate error
If Rnd < 0.5 Then Err.Raise 9999
Debug.Print "function 2 did stuff"
ErrExit:
Function2 = bReturn
Exit Function
ErrHandler:
bReturn = False
Resume ErrExit
End Function
Function Function3() As Boolean
Dim bReturn As Boolean
On Error GoTo ErrHandler
bReturn = True
Debug.Print "function 3 did stuff"
ErrExit:
Function3 = bReturn
Exit Function
ErrHandler:
bReturn = False
Resume ErrExit
End Function
2
모든 기능을 사전 객체에 저장하십시오.
는 사전에서 함수 이름을 삭제, 마이크로 소프트 스크립팅 런타임 라이브러리 함수는 함수의 끝에서 ... 실행public Sub MasterFunction()
Public Dict as Dictionary
Set dict = New Dictionary
Dict.add "Function1"
Dict.add "Function2"
Dict.add "Function3"
call Function1
call Function2
call Function3
에 대한 참조를 설정합니다. 즉,
마지막 단계는 사전을 통해 루프를 추가하여 항목이 아직 남아 있는지 확인하는 것입니다. 사전에 항목이 없으면 함수가 성공적으로 실행됩니다. 항목이있는 경우 application.run "Function1"을 사용하여 함수를 다시 호출하고 함수 이름으로 "Function1"을 대체하십시오. 아래의 전체 예를 복사하여 모듈에 붙여 넣은 다음 "MasterFunction"을 실행하십시오. 내가 호출하지 않은 세 번째 함수는 실행되지 않았다는 것을 시뮬레이션합니다. 코드를 단계별로 실행하면 남아있는 유일한 항목이 호출되지 않은 Function3임을 알 수 있습니다.
Public dict As Dictionary
Public Function MasterFunction()
Set dict = New Dictionary
dict.Add "Function1", "Function1"
dict.Add "Function2", "Function2"
dict.Add "Function3", "Function2"
Call Function1
Call Function2
Dim DictItem
For Each DictItem In dict
Application.Run DictItem
MsgBox DictItem & " has run again because it didn't execute last time"
Next
Set DictItem = Nothing
Set dict = Nothing
End Function
Function Function1()
dict.Remove "Function1"
End Function
Function Function2()
dict.Remove "Function2"
End Function
Function Function3()
dict.Remove "Function3"
End Function
관련 문제
- 1. 런타임 동안 플렉스 차트를 다시 그리는 방법
- 2. 런타임 동안 파일을로드하는 방법
- 3. 런타임 동안 테이블 뷰의 셀을 다시 배열하십시오.
- 4. Java 프로그램을 디버깅하는 동안 Eclipse에서 일부 함수를 실행하는 방법?
- 5. 런타임 동안 ActiveRecord의 테이블 이름을 변경하는 방법
- 6. asp.net 버튼을 다시 게시하기 전에 javascript 함수를 실행하는 방법
- 7. Boost.Process - 프로세스가 함수를 실행하는 방법?
- 8. 문자열 vb.net에서 함수를 실행하는 방법
- 9. 런타임 동안 플러그인 특정 구성이 해석되는 방법
- 10. Google 데이터 API에서 연락처 데모를 실행하는 동안 런타임 예외
- 11. cppunit에서 테스트 프로그램을 실행하는 동안 런타임 오류가 발생했습니다.
- 12. 런타임 동안 동적 레이아웃이 변경됨
- 13. 동시에 두 개의 함수를 실행하는 방법
- 14. C++ 클래스의 함수를 다시 선언하십시오.
- 15. LINQ를 사용하여 개체 목록에서 함수를 실행하는 방법
- 16. 함수를 javascript, jquery에서 실행하는 것을 중지하는 방법?
- 17. 에코 호출 내에서 함수를 실행하는 방법
- 18. 아이폰 SDk에서 C 함수를 실행하는 방법?
- 19. AS3을 사용하여 jQuery 함수를 실행하는 방법
- 20. Google지도 V3 - gmap에서 콜백 함수를 실행하는 방법
- 21. 서버 측에서 자동으로 함수를 실행하는 방법
- 22. asp.net 버튼을 다시 게시하기 전에 javascript 함수를 실행하는 방법은 무엇입니까?
- 23. Java에서 특정 기간 동안 작업을 실행하는 방법?
- 24. ctest를 실행하는 동안 오류가있는 위치를 찾는 방법
- 25. 프로그램을 실행하는 동안 목록을 만드는 방법
- 26. 부팅하는 동안 MASM32 프로젝트를 실행하는 방법?
- 27. checkstyles를 실행하는 동안 범위를 정의하는 방법
- 28. VBA 매크로를 실행하는 동안 Excel 통합 문서를 다시 열려면 어떻게합니까?
- 29. PostgreSQL을 사용하여 집계 함수를 만드는 동안 Concat 함수를 사용하는 방법
- 30. jQuery, 변수를 전달하는 동안 함수를 호출하는 방법