2012-06-14 32 views
7

Tôi đã một loạt tên gọi là "X" mà là 1000 hàng và tôi muốn giảm bớt động này đến 100.Tôi làm cách nào để xác định lại dải ô được đặt tên bằng VBA?

tôi đã cố gắng Range("X").Resize(100,1) và cũng .Resize(-900,0) nhưng dường như không thay đổi kích thước của dãy tên khi tôi kiểm tra trong nổi trội bằng cách chọn phạm vi từ trình đơn thả xuống phạm vi. Tôi đang làm gì sai?

+3

Làm việc cho tôi. '? range (" a1: a1000 ") thay đổi kích thước (100,1) .address' trả về' $ A $ 1: $ A $ 100' –

Trả lời

18

Giả sử bạn có dải ô được đặt tên là "myRange". Nếu bạn làm điều này:

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

Điều bạn nói là: Tôi có dải này r. Đặt nó thành myRange làm trạng thái ban đầu. Sau đó, đổi kích thước r thành một thứ khác. Những gì bạn đã làm là bạn đã đổi kích thước r, chứ không phải myRange.

Để thay đổi kích thước một loạt tên, bạn cần phải làm điều gì đó như thế này:

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

Cảm ơn bạn vì những đóng góp của bạn. Dựa trên sự giúp đỡ của bạn, tôi đã có thể tập hợp lại mã này để thay đổi kích thước một dãy và đăng n hàng từ một mảng vào nó.

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 
Các vấn đề liên quan