我已经叫了一个名为范围的“X”,这是1000行,我想这个动态减少100如何使用VBA重新定义命名范围?
我试图Range("X").Resize(100,1)
也.Resize(-900,0)
但也似乎改变命名范围的大小,当我在检查通过从范围下拉菜单中选择范围来优化。我究竟做错了什么?
我已经叫了一个名为范围的“X”,这是1000行,我想这个动态减少100如何使用VBA重新定义命名范围?
我试图Range("X").Resize(100,1)
也.Resize(-900,0)
但也似乎改变命名范围的大小,当我在检查通过从范围下拉菜单中选择范围来优化。我究竟做错了什么?
假设您有一个名为“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
谢谢您的贡献。基于你的帮助,我可以把这段代码放在一起来调整一个范围的大小,并将数组中的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
适合我。 'range(“a1:a1000”)。resize(100,1).address' returns'$ A $ 1:$ A $ 100' –