2016-04-08 2 views
0

J'ai 10 colonnes dans une feuille de calcul avec chaque feuille de calcul ayant un ID spécifié défini dans la zone de nom. Comment puis-je stocker les ID dans un tableau en utilisant VBA.Stockage des noms de champs dans un tableau dans excel-vba

p.s. Je ne veux pas stocker les en-têtes de colonnes. Je veux stocker leurs ID qui sont définis dans la boîte de nom pour chaque colonne.

+1

Que voulez-vous dire nom de boîte? Pourriez-vous poster une capture d'écran et fournir plus de détails? – Will

+1

@Will - Je prends cela pour être * plages nommées * avec la * boîte de nom * à gauche de la barre de formule. – Jeeped

Répondre

2

Parcourez les plages nommées du classeur; vérifiez que chaque nom fait référence à une plage sur cette feuille de calcul et que la plage nommée fait référence à une plage qui est au moins partiellement dans la première ligne.

Dim n As Long, vColNames As Variant 
Dim c As Long, twb As Workbook 

Set twb = ThisWorkbook 

With Worksheets("Sheet1") 
    With .Cells(1, 1).CurrentRegion 
     'dim the array one-based to parallel the columns 
     ReDim vColNames(1 To .Columns.Count) 

     'loop through all names looking for ones that intersect first row 
     For n = 1 To twb.Names.Count 
      'check the parent worksheet first 
      If twb.Names(n).RefersToRange.Parent.Name = .Parent.Name Then 
       ' next check to ensure first row is part of named range 
       If Not Intersect(twb.Names(n).RefersToRange, .Rows(1), .Cells) Is Nothing Then 
        vColNames(Intersect(twb.Names(n).RefersToRange, .Rows(1)).Cells(1, 1).Column) = _ 
         twb.Names(n).Name 
       End If 
      End If 
     Next n 
    End With 
End With 


For c = LBound(vColNames) To UBound(vColNames) 
    Debug.Print vColNames(c) 
Next c 

noms avec la portée du classeur sortira comme myNamedRange; ceux avec la portée de la feuille de travail seront sous la forme Sheet1! myNamedRange.

+0

Je suis un grand fan de votre travail –