2011-05-26 8 views
5

Tümü,Çalışma zamanı hatası '9': aralık dışında simge - Excel VBE kapalı olduğunda sadece

Ben bir Excel makro bir bazı VBA kodu ile bir hata dönük ediyorum.

  • bazlı hücre aralığı yeni bir çalışma sayfası oluşturmak için kod, biçim çalışan bir modül var o ve bu aynı modülü içinde
  • değerlerin bir demet eklentinin, ben belirleyebileceğimiz: İşte çalışılıyor iş akışı var son satırda (önceki adımlara bağlı olarak her zaman farklı olacaktır)
  • Bu aralığı öğrendiğimde, yeni oluşturulan çalışma sayfalarını kododule yazmak için aşağıdaki kodu kullanıyorum, böylece bir 'change_event' kurabilirim. Sadece change_event Sadece belirlenen aralıkta değerler değiştirildiğinde tetiklemek istiyorum: `

    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 
    

kod belirtilen çalışma sayfasının codemodule aşağıdaki çalışır ve yazıyor:

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` 

Bu kod da çalışır ve aralıktaki hücreler değiştiğinde ileti kutusu görüntülenir.

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

vurmak ayıklama hattına beni alır:

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

Ama aslında aşağıdaki satırda hata atıyor:

Ancak VBE ile hatayı üretecek kapalı
Startline = .CreateEventProc("Change", "Worksheet") + 1 
+0

Tamam, bu nedenle kodu, belirtilen çalışma sayfasındaki tüm kodları silmeyi ve her seferinde silme ve yazma yerine yeniden yazmayı değiştirdim. Bu hatanın ortaya çıkmasını engeller, ancak bunun yerine VBE'yi otomatik olarak açar .... VBE'yi kapatmak için aşağıdaki satırı kullanıyorum ... çok ince değil. Daha zarif bir çözüme açığım: Application.VBE.MainWindow.Visible = False – gg7aph

+0

Olası çoğaltılacak [VBA değişen sayfa kod adı Run-Time Error 9: Subscript aralık dışı] (http://stackoverflow.com/questions/ 41022319/vba değiştiren-tabaka kod adı-çalışma-zaman-hata-9-simge Çıkış aralık) – ThunderFrame

cevap

2

bunu hata alıyorsanız, ama burada o

önleyecektir başka yaklaşım neden emin değilim
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 
İlgili konular