2015-04-09 1 views
0

Peut-être que j'essaie d'en faire trop ici, mais j'ai travaillé pendant des heures sans succès. J'espère que tu peux aider.VBA Passage d'un nom de plage d'une feuille de travail différente à une fonction

Je crée une fonction dont le seul paramètre est une plage nommée sur une autre feuille dans le même classeur. Mon problème est que je ne peux pas comprendre comment passer ce nom dans la fonction et l'utiliser.

Mon objectif est d'appeler la fonction pour additionner la colonne spécifiée par la plage nommée sur l'autre feuille de calcul, appelée Paiements clients.

Voici mon code qui fonctionne:

Function PayPerMonth() 
PayPerMonth = Application.WorksheetFunction.Sum(Worksheets("Client Payments").Range("C:C")) 
End Function 

Je reçois un total qui est correct, mais bien sûr, je spécifié la colonne dans la fonction. Pas trop utile.

Voici ce que j'ai essayé cela ne fonctionne pas:

Function PayPerMonth(ColumnToAdd) 
PayPerMonth = Application.WorksheetFunction.Sum(Worksheets("Client Payments").Range("ColumnToAdd")) 
End Function 

Il ne fonctionne pas lorsque je supprime les guillemets autour ColumnToAdd, et bien d'autres variantes que j'ai essayé. Ce que je veux faire est d'entrer = PayPerMonth (MBPADV) ou = PayPerMonth (SBTSADV) etc. pour appeler la fonction et viser la colonne de droite, où MBPADV et SBTSADV sont nommés des colonnes.

Je ne suis pas coincé sur l'utilisation des noms de colonnes. Cela le rend plus lisible (pour moi, de toute façon!).

Est-ce que cela peut être fait?

Répondre

0

Range("named range") renvoie une plage dans le WorkBook, il devrait donc être bon de passer à votre fonction qui prend une portée.

En supposant que vous avez une plage nommée dans le classeur appelé ColumnToAdd, cela devrait fonctionner:

Function PayPerMonth(ColumnToAdd) 
    PayPerMonth = Application.WorksheetFunction.Sum(Range("ColumnToAdd") 
End Function 

mise à jour par les commentaires:

Function PayPerMonth(ColumnToAdd As Range) 
    PayPerMonth = Application.WorksheetFunction.Sum(Range(ColumnToAdd)) 
End Function 

Utilisation:

Dim MyRange as Range 
MyRange = Sheet.Columns("C") 
Amount = PayPerMonth(MyRange) 

Remarque :

Votre appel de fonction renverra une variante. Vous pouvez déclarer As Integer, As Single ou As Float à la fin de Function PayPerMonth(ColumnToAdd As Range) pour aider A) accélérer le traitement, car Excel ne sera pas à passer du temps à essayer de comprendre quel type de variable, il travaille avec, et B) vous/la Codeur suivant quand vient le temps de maintenir le code - être explicite rend votre code plus lisible.

+0

Oups! Merci pour votre réponse, FreeMan. Non, il n'y a pas de nom de colonne ColumnToAdd. Je l'ai prévu pour être une variable à l'intérieur de la fonction. Ce que je veux faire, si c'est possible, c'est de passer dans la fonction le nom de la colonne que je souhaite additionner. Puis-je faire ceci? – Richard

+0

Je suis sûr que nous nous rapprochons, mais toujours pas de cigare. Dans vos commentaires d'utilisation ci-dessus vous noter la fonction est appelée à partir de VBA (par exemple une autre fonction ou Sub). Ce n'est pas ce que je veux faire. – Richard

+0

Je souhaite appeler la fonction dans plusieurs cellules de la feuille de calcul, par ex. = PayPerMonth (SBTSADV), = PayPerMonth (MBPADV), etc.où le paramètre est la colonne nommée sur une autre feuille de calcul. La fonction finale réelle est beaucoup plus compliquée cette simple somme. C'est pourquoi je veux appeler une fonction dans la cellule. La seule pierre d'achoppement que j'ai est de passer le nom de la colonne dans la fonction et ensuite de l'utiliser dans mon calcul. J'ai essayé votre 'Mise à jour par commentaires:', mais cela n'a pas fonctionné. – Richard