doch noch Fragen
28.01.2014 10:13:09
Erich
Hi Michael,
kein Problem! :-)
Deine Antworten werden z. T. neue Fragen auf:
zu 1.: Bei Benutzung eines vorhandenen Blatts für die Ausgabe stellen sich gleich wieder zwei Fragen:
1a) Kann sich das Programm darauf verlassen, dass das Blatt "Vorlage" existiert?
Oder muss das geprüft und das Blatt nötigenfalls neu erstellt werden?
1b) Im Blatt "Vorlage" können Daten stehen, die durch die Ausgabe (evtl. teilweise) überschrieben werden.
Danach ist evtl. nicht zu sehen, was vorher schon im Blatt stand und was neu ausgegeben wurde.
Sollen vielleicht alle Alt-Daten auf Blatt "Vorlage" vor der Ausgabe gelöscht werden?
zu "es werden max. 60 Zeilen benötigt.": Du meinst die 52 Zeilen von 9 bis 60, oder?
zu Frage 8:
Ein Programm schreibt man nicht nur für "normalerweise". Menschen machen Fehler. Maschinen auch.
Fehler passieren bei der Dateneingabe, beim Einrichten einer Gültigkeitsprüfung, beim Programmieren, ...
Was absehbar ist, sollte möglichst sinnvoll geregelt werden.
Also noch einmal: Was soll geschehen, wenn f statt F eingegeben wird? "Also F nicht f" beantwortet die Frage nicht.
(Nebenbei: Hast du mal ausprobiert, was die derzeitige Version des Programms bei Kleinschreibung tut?)
zu Verknüpfungen: Das war ja auch nur eine kleine Bemerkung meinerseits. :-)
Und zum Testen:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wsMon As Worksheet, lngC As Long, arD, arA, qq As Long
Dim arE() As String, arF() As String, ee As Long, ff As Long
Dim arErg() As String
If Not Target.Address(0, 0) = "C7" Then Exit Sub
If Not IsDate(Target) Then MsgBox "Kein Datum - Abbruch": Exit Sub
Set wsMon = Sheets(Format(Target, "mmmm")) ' Tabellenblatt mit dem Monat
lngC = Day(Target) + 3 ' Spalte mit dem Tag
' MsgBox "Das eingegebene Datum steht in Blatt '" & wsMon.Name _
& "' in Zelle " & Cells(5, lngC).Address
arD = wsMon.Cells(9, lngC).Resize(52) ' Werte Spalte des Tages
arA = wsMon.Cells(9, 1).Resize(52) ' Werte Spalte A
ReDim arE(1 To UBound(arD), 1)
ReDim arF(1 To UBound(arD), 1)
For qq = 1 To UBound(arD)
Select Case arD(qq, 1)
Case "" ' leer
Case "F", "S", "N", "Alt/F", "Alt/S" ' "Bedingung primär"
ee = ee + 1
arE(ee, 0) = arA(qq, 1)
arE(ee, 1) = arD(qq, 1)
Case Else ' Alle anderen
ff = ff + 1
arF(ff, 0) = arA(qq, 1)
arF(ff, 1) = arD(qq, 1)
End Select
Next qq
With Sheets("Vorlage") ' Ausgabe in Blatt "Vorlage" - muss existieren
.Cells(1, 1).Resize(ee, 2) = arE ' primäre
.Cells(3, 4).Resize(ff, 2) = arF ' andere
End With
' Me.Activate ' falls Blatt TabEingabe aktiv sein soll
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich