2011-05-26 17 views
5

सभी,रन-टाइम त्रुटि '9': सीमा से बाहर सबस्क्रिप्ट - केवल जब एक्सेल VBE बंद कर दिया है

मैं एक त्रुटि एक एक्सेल मैक्रो में मौजूद कुछ VBA कोड के साथ सामना करना पड़ रहा है।

  • आधारित कक्षों की श्रेणी मैं एक मॉड्यूल है कि एक नए कार्यपत्रक बनाने के लिए कोड, प्रारूप चलाता है यह और मूल्यों का एक समूह
  • यह एक ही मॉड्यूल के भीतर
  • में जोड़ने, मैं निर्धारित: यहाँ कार्यप्रवाह मैं प्रयास कर रहा है आखिरी पंक्ति पर आबादी (जो पिछले चरणों के आधार पर हमेशा अलग रहेगी)
  • एक बार जब मैं इस श्रेणी को जानता हूं, तो मैं नव निर्मित वर्कशीट कोडमोड्यूल को लिखने के लिए नीचे दिए गए कोड का उपयोग करता हूं ताकि मैं 'change_event' सेट कर सकूं। मैं केवल change_event जब सीमा मैं सिर्फ निर्धारित में मान बदल रहे हैं ट्रिगर करना चाहते हैं: `

    Dim Startline As Long 
    Startline = 1 
    Dim x As Integer 
    x = Errors.Count - 1 
    
    Dim rng As Range 
    Set rng = Range("D" & LastRow - x & ":" & "D" & LastRow) 
    
         With ThisWorkbook.VBProject.VBComponents(VRS.CodeName).CodeModule 
         Startline = .CreateEventProc("Change", "Worksheet") + 1 
         .InsertLines Startline, "Dim rng As Range " 
         Startline = Startline + 1 
         .InsertLines Startline, "Set rng = Range(" & """" & CStr(rng.Address) & """" & ")" 
         Startline = Startline + 1 
         .InsertLines Startline, "If Target.Count > 1 Then Exit Sub" 
         Startline = Startline + 1 
         .InsertLines Startline, "If Intersect(Target, rng) Is Nothing Then Exit Sub" 
         Startline = Startline + 1 
         .InsertLines Startline, "MsgBox (""Value Changed!..."") " 
         End With 
    

कोड काम करता है, और लिखते हैं निर्दिष्ट कार्यपत्रक के codemodule में निम्नलिखित:

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim rng As Range 
Set rng = Range("D58:D62") 
If Target.Count > 1 Then Exit Sub 
If Intersect(Target, rng) Is Nothing Then Exit Sub 
MsgBox ("Value Changed!...") 
End Sub` 

यह कोड भी काम करता है, और संदेश बॉक्स तब प्रकट होता है जब सीमा में कक्ष बदल जाते हैं। हालांकि, VBE साथ बंद कर दिया यह त्रुटि उत्पन्न करेगा:

Run-time error '9': Subscript out of range 

साधते डिबग मुझे लाइन पर ले जाता है:

With ThisWorkbook.VBProject.VBComponents(WS.CodeName).CodeModule 

लेकिन यह वास्तव में निम्न पंक्ति पर त्रुटि फेंकता है:

Startline = .CreateEventProc("Change", "Worksheet") + 1 
+0

ठीक है, इसलिए मैंने निर्दिष्ट वर्कशीट से सभी कोड को हटाने के लिए कोड को संशोधित किया और हर बार ताजा हटाने और लिखने के बजाय पुनः लिखना। यह त्रुटि को पॉप-अप करने से रोकता है, लेकिन इसके बजाय VBE को स्वचालित रूप से खोलता है .... मैं वीबीई को बंद करने के लिए नीचे दी गई रेखा का उपयोग करता हूं ... हालांकि बहुत चिकना नहीं है। मैं एक और अधिक सुन्दर समाधान के लिए खुला हूं: एप्लिकेशन.वीबीई.माइनविंडो। दृश्यमान = झूठा – gg7aph

+0

[वीबीए बदलते शीट कोडनाम रन-टाइम त्रुटि 9: संभावित सीमा से बाहर निकलने का संभावित डुप्लिकेट] (http://stackoverflow.com/questions/ 41022319/VBA बदलते पत्र-कोडनेम-रन-टाइम त्रुटि-9-सबस्क्रिप्ट-बाहर के रेंज) – ThunderFrame

उत्तर

2

मुझे यकीन है कि तुम क्यों कि त्रुटि हो रही है, लेकिन यहाँ एक और दृष्टिकोण है कि यह

से बचने जाएगा नहीं कर रहा हूँ
Sub Main() 

    Dim ws As Worksheet 
    Dim rng As Range 
    Dim sCode As String 

    Set ws = ThisWorkbook.Worksheets.Add 
    Set rng = ws.Range("D1:D10") 

    sCode = "Private Sub Worksheet_Change(ByVal Target As Range)" & vbNewLine & vbNewLine 
    sCode = sCode & vbTab & "Dim rng As Range" & vbNewLine & vbNewLine 
    sCode = sCode & vbTab & "Set rng = Me.Range(" & """" & rng.Address & """" & ")" & vbNewLine & vbNewLine 
    sCode = sCode & vbTab & "If Target.Count > 1 Then Exit Sub" & vbNewLine 
    sCode = sCode & vbTab & "If Intersect(Target, rng) Is Nothing Then Exit Sub" & vbNewLine & vbNewLine 
    sCode = sCode & vbTab & "MsgBox (""Value Changed!..."") " & vbNewLine 
    sCode = sCode & "End Sub" 

    ThisWorkbook.VBProject.VBComponents(ws.CodeName).CodeModule.AddFromString sCode 

End Sub 
संबंधित मुद्दे