我們已經創建了幾個用作對應用程序執行特定操作的腳本的excel宏。每個腳本有多個函數調用和執行過程中的一些這些函數調用的失敗,因爲應用程序相關的性能問題(如窗戶沒有正確加載/窗口時間比預計負荷等更多的時間)
由於這些應用PERF的相關問題發生經常安靜,我們的執行始終失敗,我們計劃在腳本中實現一些代碼,在執行過程中我們可以重新執行失敗的函數(宏中的函數)。
你可以讓我知道我應該如何編碼來實現我的目標再次執行相同的功能。
例如,
如果在宏有下面的函數調用:
功能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
當一個函數運行......在函數結束時,從字典中刪除的功能名稱。即
public Function Function1()
dict.remove "Function1"
End Function
最後一步是在詞典中添加循環以查看是否有任何項目仍然存在。如果字典中沒有項目,那麼你的函數成功執行。如果有項目,再用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. Java同時執行相同功能
- 2. 如何在用戶輸入時運行相同的功能
- 3. 如何重新運行功能?
- 4. DRY - 多行代碼執行相同的更新功能
- 5. 如何同時運行這些功能?
- 6. 如何在mootools的jquery中執行相同的功能/函數
- 7. 如何在angularjs功能同步執行
- 8. 何時同時運行異步功能?
- 9. 執行功能的同時運行腳本
- 10. 運行通過相同的功能
- 11. 在啓動相同功能之前停止執行JQuery功能
- 12. 未完成前重新執行功能
- 13. 在相同的運行時間運行兩個相同的DLL?
- 14. 如何在後臺運行其他功能時在後臺運行功能?
- 15. JavaScript如何運行onLoad和onChange相同的功能
- 16. 點擊重新運行功能
- 17. 如何同時運行兩個不同功能的案例?
- 18. 如何從重新排序的活動執行特定功能
- 19. 如何在條件滿足後重新運行事件功能?
- 20. 執行三個功能同時
- 21. 同步執行功能
- 22. Javascript代碼在功能外運行,但在功能內運行時不運行
- 23. 刷新前執行功能
- 24. 如何阻止已運行的相同exe文件的執行?
- 25. 我如何執行功能?
- 26. 爲不同的類執行相同的功能
- 27. 運行時重定位功能 - gcc
- 28. 在外殼上執行/運行功能時出現SQLite錯誤
- 29. OpenCL的:在運行時重新定位執行實例perticular芯
- 30. 同時運行更多功能