2010-10-07 18 views
1

J'ai déjà un nom défini pour une colonne particulière dans ma feuille de calcul. Comment afficher une valeur de cellule par son nom défini?VBA: Comment afficher une valeur de cellule par son nom défini?

J'ai essayé ces:

Public Sub Test() 
    Dim R As Range 
    Set R = ThisWorkbook.Names("SomeName").RefersToRange 
    MsgBox CStr(R.Value) 
    End Sub 

mais erreur d'exécution est survenue "Type Mismatch" (code d'erreur: 13).

Quel est le problème avec le code? Quel est le type de données actuel de RefersToRange.Value?

La documentation indique que RefersToRange retourne l'objet Range, mais il semble varier avec l'objet Range retourné par ActiveCell, parce que je n'ai pas de problème avec le code suivant:

MsgBox CStr(ActiveCell.Value) 

J'utilise Excel 2003

Répondre

2

RefersToRange ne retourne un objet Range. Je suppose que vous obtenez votre incompatibilité de type sur la ligne Cstr. Si la plage a plusieurs cellules, la propriété Value renvoie un tableau Variant. Pour ce faire, dans la fenêtre immédiate (Control + G dans le VBE). La fonction CStr ne peut pas gérer un argument de tableau et c'est la raison pour laquelle vous obtenez cette erreur. Vous pouvez accéder à une cellule particulière dans la gamme, comme la première cellule, comme celui-ci

ThisWorkbook.Names("SomeRange").RefersToRange(1).Value 

Ou boucle à travers eux comme le suggère Fink.

+0

@Kusleika, vous économisez mes journées, merci pour la solution et le conseil de la fenêtre immédiate. :-) – Vantomex

1

Vous devriez être en mesure de fournir uniquement le nom de la chaîne (ou même les cellules) propriété:

Set R = ThisWorkbook.Range("SomeName") 
+0

Eh bien, 'MsgBox CStr (. Range ("de UnNom") Valeur)' ne fonctionne pas trop, même code d'exécution d'erreur. – Vantomex

+1

Oh, j'ai mal compris ce que vous aviez un problème avec. La propriété Value d'un objet Range n'est pas quelque chose que vous pouvez convertir en chaîne et afficher dans un message. Par conséquent, le type de discordance. Vous devez sélectionner la cellule dans la plage que vous souhaitez afficher - la valeur d'une * cellule * peut être transformée en chaîne. – Mikeb

+0

Mikeb, merci pour plus d'explications. – Vantomex

2

que vous devez itérer t Il se situe dans cette plage et obtient la valeur de chaque cellule séparément si la portée s'étend sur plusieurs cellules. Sinon, il génère une erreur.

Sub Test() 

    Dim r As Range 
    Dim cell As Range 

    Set r = Range("Something") 

    If r.Cells.Count > 1 Then 
     For Each cell In r.Cells 
      MsgBox cell.Value 
     Next cell 
    Else 
     MsgBox r.Value 
    End If 
End Sub 

Cependant, vous pouvez définir la valeur à toutes les cellules définies dans la plage en réglant la valeur d'une plage de cellules comme ceci:

Sub Test() 

    Dim r As Range 

    Set r = Range("Something") 

    r.Value = "Test" 
End Sub 
+0

merci beaucoup, je vote votre réponse. Supposons que je puisse accepter deux réponses, je le ferai. – Vantomex

0

Vous pouvez obtenir la valeur de la cellule par son nom comme suit: -

Workbook.Range("SomeName").Value