2016-03-31 19 views
0

Excel VBA'da yeniyim ve öğrenme için bir zaman izleme çalışma kitabı oluşturmaya başladım.Excel VBA/Sheets.Add.Name Loop atar Hata 9

Sub newyear() 

Dim month(12) As String 
Dim i As Integer 

month(1) = "Januar" 
month(2) = "Februar" 
... 
month(12) = "Dezember" 

For i = 1 To 12 
On Error Resume Next 
Sheets.Add(Tabelle1).Name = month(i) 
MsgBox Err.Number <- this throws Error 9: "Subscript Out Of Range" after 
         every worksheet added during the loop 
Next i 

End Sub 

Runtime sırasında döngü çalışma sonrasında çalışma ekleyerek iken Iletikutusu ile her eklenen levha sonra açılır: Bunun bir kısmı için-Loop yılda her ay için bir adlandırılmış çalışma sayfası eklemek zorundadır hangi Hata 9: "Aralık Dışında Kalan".

Bunun neden olduğunu bilmiyorum, internette biraz okumaya başladım ve hala bir çözümüm yok .. belki temel bir şeyi özlüyorum, çünkü yeni başlayan biriyim.

Lütfen bana yardım edin.

Şimdiden teşekkürler!

+0

Kodumun sizin için uygun olup olmadığını lütfen işaretleyin –

cevap

0

Neden hata yapmaktan kaçınmak istediğinizden emin değilim. Muhtemelen bunun için uzun bir kod yazabilirsiniz, ancak bunun için hiçbir faydası yoktur. Ayrıca daha kısa bir şey deneyebilirsiniz:

Sub newyear() 

    Dim month(12) As String 
    Dim i As Integer 

    month(1) = "January" 
    month(2) = "February" 
    month(3) = "March" 
    month(4) = "April" 
    month(5) = "May" 
    month(6) = "June" 
    month(7) = "July" 
    month(8) = "August" 
    month(9) = "September" 
    month(10) = "October" 
    month(11) = "November" 
    month(12) = "Dezember" 

    On Error Resume Next 
    For i = 1 To 12 
     If Worksheets(month(i)) Is Nothing Then 
      Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = month(i) 
     End If 
    Next 

End Sub 
+0

Evet .. bu da şu sonuca vardığım sonuç: Peki, aslında hatayı önlemeye çalışın ?! Ama bilirsin, kodumun hata yaptığını düşündüğümden yanlış bir şey kodladım, değil mi? Temiz kod yazmanın ve temiz kodun hata üretmemesi gerektiğini düşündüğüm saf naif olduğunu düşündüm. Giriş için teşekkürler ne olursa olsun :). – Fr4gFr0g

+0

Bazen bir hata bir sorun değil, bir özellik :) VBA'da, Excel'de olduğu gibi, hataları kendi yararınıza kullanabilirsiniz. Birçok vaka için iyi bir kısayol. –

2

Lütfen aşağıdaki kodlara bakınız.

Sub newyear() 
On Error Resume Next 
Dim month(12) As String 
Dim i As Integer 
month(1) = "January" 
month(2) = "February" 
month(3) = "March" 
month(4) = "April" 
month(5) = "May" 
month(6) = "June" 
month(7) = "July" 
month(8) = "August" 
month(9) = "September" 
month(10) = "October" 
month(11) = "November" 
month(12) = "Dezember" 
Dim ws As Worksheet 
For i = 1 To 12 
    With ThisWorkbook 
     If Worksheets(month(i)).Name <> month(i) Then 
      Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count)) 
      ws.Name = month(i) 
     End If 
    End With 
    If Err.Description <> "" Then 
     Err.Clear 
     'do what you want to do 
    End If 
Next i 
End Sub 
+0

Öneri için teşekkürler! Ne yazık ki 'MsgBox = Err.Number' ekledikten sonra 'Next i' kodunuza ekleniyor Hata 9 ist yine de her eklenen sayfadan sonra çıkıyorum :(. – Fr4gFr0g

+0

@ Fr4gFr0g, Neden err.Number'i neden eklediğimi anlayabilirim i –

+0

@ Fr4gFr0g Yukarıdaki cevabı düzenledim.Pls doğruysa çözüm olarak işaretler –