Stworzyłem excel UDF, który akceptuje wejście tablicy. Chcę, aby zezwalała tylko na parzystą liczbę elementów w tablicy. Oto kod: (to tylko krótkie, więc będę to wszystko i w ten sposób można mieć pewien kontekst post)Jak wymusić argument w programie Excel UDF
Function SUBSTITUTEMULTI(inputString As String, ParamArray criteria() As Variant) as String
Dim subWhat As String
Dim forWhat As String
Dim x As Single
If UBound(criteria()) Mod 2 = 0 Then
'check whether an even number of arguments is input
MsgBox "You've entered too few arguments for this function", vbExclamation
Else
x = 0
For Each element In criteria
If x = 0 Then
subWhat = element
Else
forWhat = element
inputString = WorksheetFunction.Substitute(inputString, subWhat, forWhat)
End If
x = 1 - x
Next element
SUBSTITUTEMULTI = inputString
End If
End Function
Obecnie powrotu okno komunikatu, który wygląda jak własny jednego programu Excel, który pojawia się, kiedy wchodzi SUBSTITUTE()
z brak trzeciego argumentu. Jednak gdy zrobisz to za pomocą SUBSTITUTE()
lub dowolnej podobnej funkcji, program Excel uniemożliwi Ci wprowadzenie formuły, zamiast tego kliknie z powrotem do niej, aby naprawić wadliwą funkcję. Chciałbym to, ponieważ w przeciwnym razie moja funkcja może być wklejona w stanie złamania (nieparzysta liczba argumentów) do kilku komórek, co oznacza, że pole komunikatu pojawia się kilka razy podczas przeliczania!
Jak mogę naprawić kod, aby po wykryciu niepoprawnych argumentów (nieparzystej liczby elementów w tablicy) użytkownik automatycznie powrócił do etapu formuły edycji?
Would not korzystania z tej funkcji jest bardziej intuicyjne, jeśli przeszedł wzdłuż liście oryginałów i sekundy lista podstawień? Wtedy twoja funkcja może sprawdzić, czy dwa ParamArrays były tego samego rozmiaru; obcięcie drugiego, jeśli był większy od pierwszego i dodanie drugiego z pasującą wartością z oryginału, jeśli był krótszy niż pierwszy. – Jeeped
@Jeeped Nice thought. Próbowałem naśladować klasyczną formułę 'SUBSTITUTE (..., oldText, newText)', tj. Mając naprzemienne argumenty zamiast dwóch tablic argumentów, faktycznie było to, co chciałam. Nie wierzę też, że możesz mieć 2 ParamArrays, ponieważ mają one nieokreśloną długość, więc jak możesz określić, gdzie skończyłeś, a następny zaczął?Ale twój ogólny pomysł był taki, który rozważałem, gdy mam nieparzystą liczbę argumentów, po prostu duplikuję ostatni argument w tablicy, tak że jest on całkowicie ignorowany w formule - jest to jeden ze sposobów radzenia sobie z błędami, a nie z Jeden jestem po – Greedo
Tak, nie powinienem był używać terminu *** *** Paramarray ***. Będą to proste tablice typu '= SUBSTITUTEMULTI (A1, {" a "," b "," c "}, {" x "," y "," z "})'. – Jeeped