2012-06-14 9 views
7

मैं नामांकित श्रेणी "एक्स" जो 1000 पंक्तियाँ है कहा जाता है और मैं गतिशील रूप से 100मैं वीबीए के साथ नामित रेंज को फिर से परिभाषित कैसे करूं?

मैं Range("X").Resize(100,1) की कोशिश की है और यह भी .Resize(-900,0) को यह कम करना चाहते हैं लेकिन न तो जब मैं में जाँच नामांकित श्रेणी का आकार बदलने लगते हैं रेंज ड्रॉप-डाउन मेनू से सीमा का चयन करके एक्सेल करें। मैं क्या गलत कर रहा हूं?

+3

मेरे लिए काम करता है। 'रेंज (" ए 1: ए 1000 ")। आकार बदलें (100,1)। एड्रेस' रिटर्न '$ ए $ 1: $ ए $ 100' –

उत्तर

18

मान लें कि आपके पास "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

अपने योगदान के लिए धन्यवाद। आपकी मदद के आधार पर मैं इस कोड को एक श्रेणी का आकार बदलने और एक सरणी से एन पंक्तियों को पोस्ट करने में सक्षम था।

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 
संबंधित मुद्दे