-1
votes

Comment puis-je passer une plage de cellules comme argument?

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


4 commentaires

byval x comme plage . 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 n'est pas transmis dans l'exemple donné


3 Réponses :


0
votes

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


0 commentaires

-1
votes

Plage UDF

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


0 commentaires

0
votes

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é. XXX

Donc, il s'agit d'une doublure (si vous omettez le débogage qui est là pour le débogage)

J'ai également testé cela de la feuille de calcul.


4 commentaires

A le même problème Stackoverflow.com/a/62477223/11683 initialement. Échouera si plage ("foobar") 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) 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.