2010-02-17 5 views
1

Je dois définir un nom unique pour la cellule qui appelle une fonction définie par l'utilisateur. donc j'essayé de définir un nom dans la fonction comme suitComment définir le nom d'une cellule Excel en utilisant VBA

Dim r As Range 
set r = Application.Caller 

r.Name = "Unique" 

Mais cela ne fonctionne pas. S'il vous plaît aider

Merci Vous

Répondre

5

Le code suivant définit la cellule A1 pour avoir le nom 'monNomUnique':

Private Sub NameCell() 

Dim rng As Range 
Set rng = Range("A1") 
rng.Name = "MyUniqueName" 

End Sub 

Est-ce que l'aide?

EDIT

Je ne suis pas sûr de savoir comment réaliser ce que vous avez besoin d'une manière simple, façon élégante. J'ai réussi à gérer ce bidouillage - voyez si cela peut vous aider, mais vous voudrez sûrement augmenter ma solution.

Supposons que j'ai la fonction définie par l'utilisateur suivant dans VBA que je référence dans une feuille de calcul:

Public Function MyCustomCalc(Input1 As Integer, Input2 As Integer, Input3 As Integer) As Integer 

MyCustomCalc = (Input1 + Input2) - Input3 

End Function 

Chaque fois que j'appelle cette fonction que je veux la cellule qui a appelé cette fonction à attribuer un nom. Pour ce faire, si vous allez à « ThisWorkbook » dans votre projet VBA et sélectionnez l'événement « SheetChange » vous pouvez ajouter ce qui suit:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
If Left$(Target.Formula, 13) = "=MyCustomCalc" Then 
    Target.Name = "MyUniqueName" 
End If 
End Sub 

En bref, ce code vérifie pour voir si la plage d'appel est à l'aide la fonction définie par l'utilisateur puis attribue un nom à la plage (MyUniqueName) dans cette instance.

Comme je l'ai dit, ce qui précède n'est pas génial, mais il peut vous donner un début. Je n'ai pas réussi à trouver un moyen d'incorporer du code dans la fonction définie par l'utilisateur et de définir directement le nom de la plage, par ex. en utilisant Application.Caller.Address ou Application.Caller.Cells(1,1) etc. Je suis certain qu'il y a un moyen mais j'ai peur que je sois un peu rouillé sur VBA ...

+2

Il existe une autre façon (bien que moins amicale) d'ajouter une plage nommée: ActiveWorkbook.Names. Ajouter un nom: = "myName", RefersToR1C1: = MyArea. Voir http://www.mrexcel.com/td0131.html – PPC

Questions connexes