Application.Run Wenn in Excel-VBA-Programmierung, schalte ich oft aus Berechnung und ScreenUpdating (manchmal auch Displayalerts, etc.), einige langwierige Berechnungen, und schalten Sie sie zurück zu ihren vorherigen Zuständen (nicht notwendigerweise weil diese Funktionen sich gegenseitig aufrufen können). Deshalb hätte ich gerne einen Standardweg dafür.Excel VBA: Forward ParamArray
Es gibt keine Lambda-Funktionen in VBA aber Application.Run kann eine akzeptable Lösung sein, so kam ich zu diesem Code:
Public Function FastRun(strMacroQuoted As String, ParamArray varArgs() As Variant) As Variant
Dim blnOldScreenUpdating As Boolean: blnOldScreenUpdating = Application.ScreenUpdating
Application.ScreenUpdating = False
Dim clcOldCalculation As XlCalculation: clcOldCalculation = Application.Calculation
Application.Calculation = xlCalculationManual
FastRun = Application.Run(strMacroQuoted, varArgs(0))
Application.Calculation = clcOldCalculation
Application.ScreenUpdating = blnOldScreenUpdating
End Function
Ich konnte alle Parameter aus varargs geben einen nach dem anderen zu starten (von 0 zu 29), und so würde mein FastRun die Anzahl der Parameter über das Limit nicht beschränken, das von Run festgelegt wird.
Meine Frage ist: Gibt es eine bessere (sauberere) -Lösung als 30 Parameter hintereinander zu schreiben?
Der Grund ist der zweite: Ich möchte die Prozedur mit ihrem Namen aufrufen. Wie ich geschrieben habe, möchte ich einen Standard-Weg haben, Subs 'zu beschleunigen'. Ich möchte die Anzahl der Parameter, die übergeben werden können, nicht einschränken, und ich hätte gern einen sauberen Code, ohne 30 Parameter einzeln aufzählen zu müssen. – z32a7ul
Ok. Der obige Code sollte also für dich funktionieren. – Ambie
Nun, ich akzeptiere dieses. Es führt eine Einschränkung ein: das aufgerufene Sub muss seine Parameter als variantes Array erhalten, also muss ich beim Schreiben des Subs daran denken, dass ich es später über FastRun aufrufen möchte. Aber ich habe keine bessere Lösung gefunden, die typisch für VBA ist. – z32a7ul