2012-06-14 33 views
7

Ho un intervallo denominato chiamato "X", che è di 1000 righe e voglio ridurre dinamicamente questo a 100.Come ridefinire un intervallo denominato con VBA?

ho provato Range("X").Resize(100,1) e anche .Resize(-900,0) ma nessuno dei due sembra cambiare la dimensione dell'intervallo denominato quando il check-in eccellere selezionando l'intervallo dal menu a discesa dell'intervallo. Che cosa sto facendo di sbagliato?

+3

Lavori per me. '? range (" a1: a1000 "). ridimensiona (100,1) .address' restituisce' $ A $ 1: $ A $ 100' –

risposta

18

Supponiamo che tu abbia un intervallo denominato "myRange". Se si esegue questa operazione:

Dim r As Range 
Set r = Range("myRange") 
Debug.Print r.Resize(10, 1).Address 

Quello che stai dicendo è: ho questa gamma r. Impostalo in modo che corrisponda allo myRange come stato iniziale. Quindi ridimensionare r in qualcos'altro. Quello che hai fatto è che hai ridimensionato r, non myRange.

Per ridimensionare un intervallo denominato, è necessario fare qualcosa di simile:

Dim wb As Workbook 
Dim nr As Name 

Set wb = ActiveWorkbook 
Set nr = wb.Names.Item("myRange") 

' give an absolute reference: 
nr.RefersTo = "=Sheet1!$C$1:$C$9" 

' or, resize relative to old reference: 
With nr 
    .RefersTo = .RefersToRange.Resize(100, 1) 
End With 
1

Grazie per i vostri contributi. Sulla base del tuo aiuto sono riuscito a mettere insieme questo codice per ridimensionare un intervallo e pubblicare n righe da un array.

Sub PostArrayLinesToRange(ByVal rngName As String, ByRef arr As Variant, ByVal r As Long) 
    Dim wb As Workbook 
    Dim rng As Range 
    Dim nr As Name   'Variable to change named range size definition 

    Set wb = ThisWorkbook 
    Set rng = Range(rngName) 

    rng.Clear 
    Set nr = wb.Names.item(rngName) 
    With nr 
     .RefersTo = .RefersToRange.Resize(r, UBound(arr, 2)) 
    End With 
    Set rng = Range(rngName) 
    rng = arr 
    Erase arr 
    Set nr = Nothing 
    Set rng = Nothing 
    Set wb = Nothing 
End Sub 
Problemi correlati