アプリケーションに対して特定のアクションを実行するためのスクリプトとして使用するExcelマクロはほとんど作成していません。各スクリプトには複数の関数呼び出しがあり、実行中にこれらの関数呼び出しの一部がアプリケーション関連のパフォーマンス上の問題(Windowsが正しく読み込まれなかった/ウィンドウの読み込みに予想以上に時間がかかったなど)によって失敗します。
頻繁に静かになり、私たちの実行は常に失敗しています。実行中に失敗した関数(マクロからの関数)を再実行できるスクリプトをいくつか実装する予定です。
同じ機能を再度実行する目的を達成するために、どのようにコードするべきか教えてください。マクロで関数を下回るがある場合、例えば
、
コール:この場合
機能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
すべての関数を辞書オブジェクトに格納します。
が辞書から関数名を消去し、Microsoftスクリプトランタイムライブラリ関数は、関数の最後で...実行され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"を実行してください。私が呼び出さない3番目の関数は、実行されなかったことをシミュレートします。コードをステップ実行すると、残りの唯一の項目が呼び出されていない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. javascript同じ関数onLoadとonChangeを実行する方法
- 3. 同じ放送の複数のインスタンスを同時に実行する方法
- 4. awsステップ関数の同時実行を避ける方法
- 5. 再発関数の実行時
- 6. VBAで複数の関数を同時に実行する方法
- 7. 同時に実行するスレッドの数をバインドする方法
- 8. 静的関数同時実行性ASP.NET
- 9. 2つのtestNGテストメソッドを同時に実行し、同時に同じ時間に実行するタイミング?
- 10. 実行時に同じレイアウトを複数回追加する方法
- 11. 再生フレームワークで複数のプロジェクトを同時に実行する
- 12. setTimeout関数を実行して同時に下にスクロールする方法
- 13. javascript終了後に関数を再実行する方法
- 14. Python 3複数の関数を同時に実行する
- 15. 同じコードで同じコードを同じコードで実行するC#関数
- 16. 複数のt.test()を同時に実行する方法
- 17. 複数のtclスクリプトを同時に実行する方法
- 18. 複数のアプリケーションを同時に実行する方法
- 19. ビジュアルスタジオで複数のプロジェクトを同時に実行する方法
- 20. 同時に複数のデバイスを実行する方法 - Android
- 21. オブジェクトと同時に2つの関数を実行する方法は?
- 22. 同じプロジェクトで2つのSSISパッケージを同時に実行する方法は?
- 23. 2つのJavaScript関数を同時に実行するには?
- 24. python - 同じ関数の複数の実行インスタンスを避ける方法
- 25. Clojure:実行時に関数を作成する方法
- 26. Emacsの起動時に関数を実行する方法
- 27. 同じMPIプログラムを複数回実行する方法
- 28. 同じスパークストリーミングで複数のアクションを実行する方法
- 29. 同じスパークコンテキストで複数のオンデマンドジョブを実行する方法
- 30. Node.js同時実行数10000