如何使用VBA重新定义命名范围?

时间:2012-06-14 11:14:26

标签: excel vba

我有一个名为“X”的命名区域,它是1000行,我想动态地将其减少到100个。

我尝试Range("X").Resize(100,1).Resize(-900,0)但是当我通过从范围下拉菜单中选择范围来检查excel时,似乎都没有改变命名范围的大小。我做错了什么?

2 个答案:

答案 0 :(得分:22)

假设您有一个名为“myRange”的命名范围。如果你这样做:

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

你的意思是:我有这个范围r。将其设置为匹配myRange作为其初始状态。然后将r调整为其他内容。您所做的是调整了r,而不是myRange

要调整命名范围的大小,您需要执行以下操作:

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 :(得分:1)

感谢您的贡献。根据您的帮助,我能够将此代码放在一起以调整范围,并将数组中的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