2012-06-14 9 views
7

he un rango con nombre llamado "X", que es 1000 filas y quiero reducir de forma dinámica a esta 100.¿Cómo redefino un rango con nombre con VBA?

Probé Range("X").Resize(100,1) y también .Resize(-900,0) pero tampoco parecen cambiar el tamaño del rango con nombre cuando me registro excel seleccionando el rango del menú desplegable de rango. ¿Qué estoy haciendo mal?

+3

Trabaja para mí. '? range (" a1: a1000 "). resize (100,1) .address' devuelve' $ A $ 1: $ A $ 100 –

Respuesta

18

Supongamos que tiene un rango con nombre llamado "myRange". Si hace esto:

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

Lo que está diciendo es: Tengo este rango r. Configúrelo para que coincida con myRange como su estado inicial. Luego cambia el tamaño de r a otra cosa. Lo que ha hecho es que ha redimensionado r, no myRange.

Para cambiar el tamaño de un rango con nombre, que tiene que hacer algo como esto:

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

Gracias por sus contribuciones. De acuerdo con su ayuda, pude juntar este código para cambiar el tamaño de un rango y publicar n filas de un conjunto a él.

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 
Cuestiones relacionadas