我已經叫了一個名爲範圍的「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' –