Comment puis-je créer une fonction dans VBA afin que je puisse passer une plage de cellules sous forme d'argument?
Par exemple, je veux appeler la fonction dans la feuille de calcul dans une cellule aléatoire en écrivant p>
Public Function xyz ( ByRef x() As Variant, sizeOfSelection As Integer ) xyz=x(0); End Function
3 Réponses :
Essayez l'approche suivante, veuillez:
Public Function xyz (rng as Range) As String dim arr as variant arr = rng.value if rng.cells.count>1 then Debug.print arr(1, 1), arr(1, ubound(arr,2)) xyz = rng.Address & " - " & arr(1, 1) Else xyz = rng.value End if End Function
Essayez quelque chose comme ceux-ci: P>
Option Explicit Function xyz(CountRange As Range) As Long xyz = Application.WorksheetFunction.Count(CountRange) End Function Function xyzSum(SumRange As Range) As Long xyzSum = Application.WorksheetFunction.Sum(SumRange) End Function Function xyzIf(CountRange As Range, Criteria as long) As Long xyzIf = Application.WorksheetFunction.CountIf(CountRange, Criteria) End Function
Dans le code suivant, nous évaluons simplement l'argument qui, si une plage appellera son élément par défaut qui est .Value qui pourra une gamme de plusieurs cellules renvoient un tableau de variante. Inversement, envelopper un tableau de variante entre parenthèses ne fait rien de sorte que cela n'est pas affecté. Donc, il s'agit d'une doublure (si vous omettez le débogage qui est là pour le débogage) p> J'ai également testé cela de la feuille de calcul. P> p>
A le même problème Stackoverflow.com/a/62477223/11683 initialement. Échouera si plage ("foobar") code> est une seule cellule.
@Gserg qui n'était pas le point que j'essayais de faire. Le point que j'essayais de faire est que les crochets utilisaient pour convertir une gamme en variante, tout en laissant une variante inchangée. Fonctionne aussi pour les cellules simples. Bien sûr, il faut alors continuer à vérifier les dimensions si la logique de vos fonctions dépend de la forme ..
v (1,1) code> suppose un tableau 2D. La valeur d'une seule cellule n'est pas un tableau du tout.
Ouais je sais. La réponse doit être adaptée par le questionneur. Le texte dit supprimer le débogage.print entre parenthèses.
byval x comme plage code>. Ou Stackoverflow.com/q/57159554/11683 si vous voulez devenir universel.
Quelle est la fonction censée faire?
Votre code d'exemple a des problèmes différents. Tout d'abord, il a une erreur de syntaxe, d'autre part, vous n'utilisez jamais le paramètre `zeoOfselection et le troisième que votre appel n'a qu'un seul paramètre. Et une plage n'est jamais un tableau quel est votre premier paramètre.
@Storax, oui, aussi
Taillefselection code> n'est pas transmis dans l'exemple donné