Problem beim Blättern in Tabellblättern
15.01.2006 13:55:38
Holger
Ich habe damit begonnen, eine Art Mitarbeiterverwaltung zu erstellen.
Beim Excel-Programmstart wird mit einer Monatsübersicht für Januar gestartet, der Benutzer kann über zwei cmdButtons in den Monaten vor und zurückblättern, wobei für jeden Monat ein neues Tabellenblatt samt Monatskalender erstellt wird.
Das Vorblättern wird hierbei über folgenden Code realisiert:
Sub MonatVor()
intJahr = Range("B2").Text
strMonat = Range("A2").Text
Spalte = 3
Zeile = 4
Select Case strMonat
Case "Januar"
intMonat = 2
strMonat = "Februar"
Case "Februar"
intMonat = 3
strMonat = "März"
Case "März"
intMonat = 4
strMonat = "April"
Case "April"
intMonat = 5
strMonat = "Mai"
Case "Mai"
intMonat = 6
strMonat = "Juni"
Case "Juni"
intMonat = 7
strMonat = "Juli"
Case "Juli"
intMonat = 8
strMonat = "August"
Case "August"
intMonat = 9
strMonat = "September"
Case "September"
intMonat = 10
strMonat = "Oktober"
Case "Oktober"
intMonat = 11
strMonat = "November"
Case "November"
intMonat = 12
strMonat = "Dezember"
Case "Dezember"
intMonat = 1
strMonat = "Januar"
intJahr = intJahr + 1
End Select
For intBlattprüfung = 1 To ActiveWorkbook.Sheets.Count
If Sheets(intBlattprüfung).Name = strMonat & intJahr Then
Set objBlattprüfung = Sheets(intBlattprüfung)
Exit For
End If
Next intBlattprüfung
If objBlattprüfung Is Nothing Then
Range("A6:B48").Select
Selection.Copy
Worksheets.Add Before:=ActiveWorkbook.Worksheets(1)
Worksheets(1).Name = strMonat & intJahr
ActiveWorkbook.ActiveSheet.Range("A2") = strMonat
ActiveWorkbook.ActiveSheet.Range("B2") = intJahr
Range("A6:B48").Select
ActiveSheet.Paste
With Worksheets(strMonat & intJahr).Rows()
.RowHeight = 18
End With
Call TabelleFormatieren
For intTag = 1 To Day(DateSerial(intJahr, intMonat + 1, 0))
Cells(Zeile, Spalte) = Format(DateSerial(intJahr, intMonat, _
intTag), "DD")
Cells(Zeile - 1, Spalte) = Format(DateSerial(intJahr, intMonat, _
intTag), "DDD")
Spalte = Spalte + 1
Zeile = 4
Next intTag
'Buttons für MonatVor und MonatZurück hinzufügen & an die richtige Stelle
verschieben
ActiveSheet.Buttons.Add(0, 54, 18, 18).Select
Selection.OnAction = "MonatZurück"
Selection.Characters.Text = "<"
ActiveSheet.Buttons.Add(18, 54, 18, 18).Select
Selection.OnAction = "MonatVor"
Selection.Characters.Text = ">"
'Button für Speichern & Beenden hinzufügen & an die richtige Stelle
verschieben
ActiveSheet.Buttons.Add(1.12, 72.75, 118, 15.75).Select
Selection.OnAction = "SpeichernBeenden"
Selection.Characters.Text = "Speichern & Beenden"
Call ZeilenFormatieren
Call WochenendeFärben
Call SpalteDiensteFärben
Call SpaltenAusblenden
Range("C6").Select
ActiveWindow.FreezePanes = True
ActiveSheet.Protect
Else
Sheets(strMonat & intJahr).Select
Range("C6").Select
End If
End Sub
Der Code für das Zurückblättern ist:
Sub MonatZurück()
intJahr = Range("B2").Text
strMonat = Range("A2").Text
Spalte = 3
Zeile = 4
Select Case strMonat
Case "Januar"
intMonat = 12
strMonat = "Dezember"
intJahr = intJahr - 1
Case "Februar"
intMonat = 11
strMonat = "Januar"
Case "März"
intMonat = 10
strMonat = "Februar"
Case "April"
intMonat = 9
strMonat = "März"
Case "Mai"
intMonat = 8
strMonat = "April"
Case "Juni"
intMonat = 7
strMonat = "Mai"
Case "Juli"
intMonat = 6
strMonat = "Juni"
Case "August"
intMonat = 5
strMonat = "Juli"
Case "September"
intMonat = 4
strMonat = "August"
Case "Oktober"
intMonat = 3
strMonat = "September"
Case "November"
intMonat = 2
strMonat = "Oktober"
Case "Dezember"
intMonat = 1
strMonat = "November"
End Select
If strMonat = "Dezember" And intJahr = 2005 Then
MsgBox "Weiter als Januar 2006 können Sie nicht zurückblättern.", _
vbInformation, "Funktion nicht möglich"
Else
Sheets(strMonat & intJahr).Select
Range("C6").Select
End If
End Sub
An sich funktioniert beides.
Wenn ich jedoch erst vorblättere, um mehrere Monate zu erstellen, anschließend zurückblättere und dann wieder vorblättere, bekomme ich einen Fehler 9 (Index außerhalb des gültigen Bereichs) gemeldet.
Ursächlich dafür ist folgende Zeile in der Prozedur "MonatVor":
Sheets(strMonat & intJahr).Select
Mit Einzelschritten hab ich herausgefunden, dass der Variablen strMonat in diesem Falle immer ein Monat zugeordnet wird, für den noch gar kein Tabellenblatt erstellt wurde. So kann das Tabellenblatt natürlich auch nicht geöffnet werden, sondern muss ja erst erstellt werden, was auch eigentlich über o.g. For-Schleife in der Prozedur MonatVor erledigt werden sollte.
Wie umgehe ich dieses Problem & kann verhindern, dass mir immer Fehler 9 gemeldet wird ?
Danke im Voraus,
Gruß,
Holger