Kolomnummer van named ranges uitvragen

Status
Niet open voor verdere reacties.

ML71

Gebruiker
Lid geworden
10 mrt 2006
Berichten
70
Ik ben bezig met een projectje waarbij ik gegevens uit het ene bestand overhevel in een ander bestand. Iedere maand is het bronbestand een regel langer.

Ik het doelbestand liggen de kolommen waarin de gegevens weggeschreven moeten worden niet netjes naast elkaar, dus ik dacht named ranges te gebruiken om de juiste kolom makkelijk terug te vinden, ik heb de named ranges regel 1 aangemaakt, ze verwijzen dus steeds maar naar 1 cel. Daarbij zijn de named ranges genummerd, als in voorbeeld1, voorbeeld2, etcetera.

Om de gegevens goed weg te kunnen schrijven dacht ik voor iedere named range het kolomnummer op te zoeken en op te slaan in een genummerde variabele k1, k2, etcetera.

De code die ik had bedacht:
Code:
sub test()
 for i=1 to activeworkbook.names.count
  k(i)=activeworkbook.names(i).column
 next i
end sub

Deze code werkt niet, onder andere doordat de "k(i)" leidt tot een foutmelding dat de functie niet gedefinieerd is. Hoe moet ik deze code aanpassen om het werkend te krijgen?
 
Zonder een echt voorbeeld is het niet precies te zeggen maar het zal iets als dit zijn:
Code:
For Each nm In ActiveWorkbook.Names
    If UCase(Left(nm.Name, 4)) = "NAAM" Then
        MsgBox nm.RefersTo
    End If
Next nm
 
Om de gegevens goed weg te kunnen schrijven dacht ik voor iedere named range het kolomnummer op te zoeken en op te slaan in een genummerde variabele k1, k2, etcetera.
Dat kan als je een matrix gebruikt.

Code:
Sub test()
Dim i As Integer
Dim k() As Variant
Dim k() As Variant
Dim nm As Excel.Name
    For Each nm In ActiveWorkbook.Names
       ReDim Preserve k(i)
       k(i) = nm.RefersTo
       i = i + 1
    Next nm
End Sub
 
Dit was een zeer goede tip OctaFish, waarvoor hartelijk dank!

Ik heb de code een heel klein beetje aangepast zodat het doet wat ik voor ogen had:
Code:
Sub test()
Dim i As Integer
Dim k() As Variant
Dim nm As Excel.Name
    For Each nm In ActiveWorkbook.Names
       ReDim Preserve k(i)
       k(i) = Range(nm.RefersTo).Column
       MsgBox k(i)
       i = i + 1
    Next nm
End Sub
 
Dit lijkt me voldoende:

Code:
Sub M_snb()
  For Each it In Application.Names
     MsgBox Range(it.NameLocal).Column
  Next
End Sub

NB verwijder option explicit of schakel uit met een commentaarprefix.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan