VB: Monat+Temperatur für Diagramm

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • VB: Monat+Temperatur für Diagramm

    hallo.
    ich folgendes kompliziertes problem (echt nur was für leute die zeit haben :) ).
    die aufgabenstellung ist etwas verwirrend find ich, aber lest doch bitte selbst:

    Es ist ein Visual-Basic-Programm zu schreiben.
    Eingabe von 12 Wertepaaren (Monat + Temperatur), Überprüfung der eingegebenen Daten auf Plausibilität, Speicherung der Daten in einer Datei; außerdem soll es möglich sein, daß die gespeicherten Daten – aus der Datei - wieder ins Programm eingelesen werden können.
    Dieser Teil ist Ihre Aufgabe.


    Das Visual-Basic-Projekt erhält den Namen: DatenPaare, 2 Formulare: frmDatenPaare + frmDiagram. Das „Layout“ des Programms ist folgendermaßen gestaltet (siehe auch vorgegebenes Projekt, das verbindlich ist!):
    Es enthält einen Hinweis (lblHinweis), in dem einerseits die Funktion (Fähigkeiten) des Programms beschrieben wird und andererseits dem Anwender beschrieben wird, in welcher Weise er das Programm benutzen muß/kann.
    Es enthält ein Textfeld (txtDatenPaare) + Überschrift dazu (lblTitelzuTxtDatenPaare), in das der Anwender 12 Datenpaare eingeben kann/muß in der Form: Monatsname (min. 3 Buchstabe) „;“ Temperaturwert (zwischen -30 und 40 Grad einschließlich). Die Überprüfung der eingegebenen Daten wird mit einem Knopf (btnDtnCheck) gestartet.
    Es enthält 3 „Aktionsknöpfe“: Daten speichern (btnDtnSave) Daten lesen (btnDtnRead) + Diagramm (btnDiagram); außerdem den Knopf Ende (btnEnde)

    Die Prüfung der Eingaben soll mit „Anklicken eines Knopfes“ (btnDtnCheck) gestartet werden.
    Die Prüfung umfaßt: Die Datenpaare sind zeilenweise in der Form „Mon ; Temp.’wert z.B. 12,000 ‚Entertaste’=Zeilenende“ einzugeben und dementsprechend die (abwechselnde) Eingabe von „;“ + Entertaste (vbNewLine) zu überprüfen.
    Leerzeichen vor oder nach den eingegebenen Daten sind zu entfernen.
    Der Anwender muß mindestens 3 Buchstaben für den Monatsnamen eingeben, d.h. werden mehr als 3 Buchstaben eingegeben, werden nur die ersten 3 im Programm weiter verwendet. Doppelte „3-buchstabige“ Monatsnamen sind mit entsprechender Meldung zu monieren. Zur Überprüfung soll eine Funktion (monatsEingabeOk()) benutzt werden.
    Die Temperaturwerte sind als „Single“ deklariert und dementsprechend als numerisches Datum zu überprüfen. „Unsere“ Funktion „eingabeOk()“ ist zu benutzen – natürlich entsprechend angepaßt (Namensänderung: numEingabeOk())! Auch „unsere“ anderen Funktionen sollten Sie benutzen (eventuell entsprechend angepaßt). Daneben soll die Zahleneingabe formatiert werden und zwar in der Form „#0.000“ – Dezimalzeichen im Textfeld „,“, im Programm „.“.
    Es müssen genau 12 Datenpaare eingegeben werden; nicht weniger + nicht mehr.
    Bei/während der Prüfung (d.h. bevor die Datenpaare gespeichert werden) sollen die Datenpaare in passenden Variablen „zwischengespeichert“ werden. Dabei ist zu berücksichtigen, daß die „Zwischenspeicherung“ im Programm so erfolgen soll, daß das Programm leicht/einfach auf beispielsweise 30 oder 100 Datenpaare erweitert/geändert werden kann. Hinweis: Konstantenvereinbarung „Const maxDatenPaare As Integer = 12“
    Im Fall eines Eingabefehlers soll eine passende Fehlermeldung mit Berichtigungshinweis erfolgen + die „Fehlerstelle“ (Fehlerzeile) markiert werden (siehe auch „unsere“ Funktion „fehlerGemeldet()“ – natürlich entsprechend angepaßt).

    Wenn die Prüfung der Daten ohne Fehler geblieben ist, sind die Daten in einer “Randomdatei“ zu speichern, deren vollständiger Name (mit Laufwerksbuchstabe + Pfad + Dateityp) einer Variablen (Dim datenPaareDatei As String) zugewiesen wird. Der Dateityp dieser Datei soll „MOTE“ (Const dateiTyp = ".MOTE") heißen. Für die Datensätze der Datei sind die Definitionen:
    Private Type datenPaareSatz
    monat As String
    temperatur As Single
    End Type und
    Dim datenPaar As datenPaareSatz zu verwenden.
    Falls beim Schreiben der Datei Fehler auftreten, soll eine entsprechende Fehlermeldung den Anwender darüber informieren

    Außerdem soll es möglich sein, daß der Anwender die in einer Datei gespeicherten Datenpaare wieder ins Programm ins Textfeld (txtDatenPaare) einlesen kann (Knopf: btnDtnRead), um die Daten anzusehen oder zu edieren.
    Falls beim Lesen der Datei Fehler auftreten, soll eine entsprechende Fehlermeldung den Anwender darüber informieren

    Die Steuerung zur Aktivierung/Deaktivierung der Knöpfe (btnSoundso.Enabled = false/true) soll folgendermaßen erfolgen:
    Zu Anfang sind die Knöpfe „btnDtnSave“ + „btnDiagram“ nicht aktiv. Erst nach positiver Überprüfung der Datenpaare ist der Knopf „btnDtnSave“ frei zu geben und nach erfolgreicher Abspeicherung der Daten in einer Datei der Knopf „btnDiagram“.
    Falls die Daten aus einer Datei eingelesen werden + der Anwender die eingelesenen Daten ändert/ediert, sollen die Knöpfe „btnDtnSave“ + „btnDiagram“ wieder gesperrt werden und erst wieder nach erfolgter (+erfolgreicher) Prüfung bzw. Speicherung frei gegeben werden - wie „zu Anfang“; werden die Daten nur aus einer Datei eingelesen (ohne Edierung), sollen nach erfolgreichem Lesen der Datei die Knöpfe „btnDtnSave“ + „btnDiagram“ frei gegeben werden.

    Das Projekt „DatenPaare“ mit den Visual-Basic-Dateien: DatenPaare.vbp, DatenPaare.vbw sowie frmDatenPaare.frm und frmDiagram.frm ist – in der neuesten/letzten Version - für die Lösung der Aufgabe zu benutzen.

    PS: Im Programm Ist die Klausel „Option Explicit“ zu benutzten, d.h. alle Daten/Parameter sind explizit mit einem Datentyp, mit dem die Daten/Parameter im Programm verwendet werden sollen, zu typisieren. - Daraus folgt, daß der Datentyp „Variant“ nicht benutzt werden darf!



    soweit die theorie ;)
    ich hab nun hier mal eine lösung, allerdings erscheint mir die recht langatmig.

    wer hätte einen anderen lösungsvorschlag??? oder könnte das programm hier vereinfacht schreiben??? bin für jede hilfe zu tiefst dankbar, hab nämlich nicht wirklich viel ahnung von VB :(

    Lösung 1:


    Option Explicit

    Const dateiTyp = ".MOTE"
    Const maxDatenPaare As Integer = 12

    Const maxTemp As Single = 40
    Const minTemp As Single = -30

    Private Type datenPaareSatz
    monat As String
    temperatur As Single
    End Type
    Dim datenPaar(maxDatenPaare) As datenPaareSatz 'Google sei Dank: Datenfeld definiert mit maxDatenPaare-Anzahl als Größe
    Dim datenPaareDatei As String

    Dim errNr As Long
    Dim anzSemis As Integer
    Dim anzNewLines As Integer
    Dim eingabeFehler As Boolean
    Dim zeichenLaenge As Integer





    '***********************************************************************************
    Private Sub Form_Load()
    lblHinweis.Caption = "Das Programm -DatenPaare- speichert Ihre eingegebenen Daten in Paaren in einer Randomdatei des Types -MOTE-" _
    & ", die Sie benötigen, um sich Ihre Daten als Grafik anzeigen zu lassen. Dazu ist es notwendig, dass Sie folgende Regeln bei der Eingabe beachten: " _
    + vbNewLine + vbNewLine + " Sie können 12 Datenpaare eingeben (je eine Monat mit der dazugehörigen Temperatur). " _
    + vbNewLine + " Die Dateneingabe muss in diesem Format erfolgen: mmm;#0,000" + vbNewLine + " Die Monatsbezeichnung -mmm- muss min. drei Zeichen enthalten und darf sich nicht wiederholen." _
    + vbNewLine + " Monat und Temperatur muss mit einem -;- getrennt werden." + vbNewLine + " Die Temperatur muss im Intervall von 40 bis -30°C liegen und kann drei Nachkommastellen haben." _
    + vbNewLine + " Der Temperaturwert muss mit Komma statt Punkt geschrieben werden." + vbNewLine + " Jedes Paar muss in eine extra Zeile im Textfeld geschrieben werden." _
    + vbNewLine + " Jede Zeile muss mit -Return- beendet werden." + vbNewLine + " Überzählige Zeichen des Monats oder Nachkommastellen" _
    + "der Temperatur werden abgeschnitten." + vbNewLine + vbNewLine + " Haben Sie die Eingabe der 12 Datenpaare beendet, drücken Sie bitte den Knopf - Dateneingabe abschließen-." _
    + " Daraufhin führt das Programm eine Überprüfung der Eingabe durch und bittet Sie gegebenenfalls Fehler zu korrigieren. Ist die Prüfung erfolgreich verlaufen, wird der Knopf -Daten speichern- aktiviert." _
    + "Bei dessen Betätigung speichern Sie Ihre Daten in einer Randomdatei, die Sie im erscheinenden Fenster auswählen oder erstellen können. " + vbNewLine + " Nach erfolgreicher Speicherung aktiviert sich der Knopf -Diagramm- über" _
    + " den Sie zu der graphischen Darstellung Ihrer Daten gelangen. Ist bereits eine -MOTE--Datei vorhanden, können Sie diese über den Knopf -Daten lesen- suchen und aufrufen. Die Daten werden im Textfeld sichtbar," _
    + "und Sie haben die Möglichkeit, Änderungen durchzuführen. Diese müssen allerdings ebenfalls erst geprüft und neu abgespeichert werden, bevor Sie sie im Diagramm betrachten können. " + vbNewLine + _
    vbNewLine + " Viel Erfolg mit -DatenPaare-!"
    End Sub

    Private Sub btnDtnCheck_Click()
    Dim anzSemis As Integer
    Dim anzNewLines As Integer

    lblStatus.Caption = ""
    If trennZchnOk(txtDatenPaare, anzSemis, anzNewLines) Then
    If monatsEingabeOk(txtDatenPaare, datenPaar) Then
    If numEingabeOk(txtDatenPaare, datenPaar) Then
    btnDtnSave.Enabled = True
    End If
    End If
    End If
    End Sub

    Private Sub btnDtnSave_Click() ' Btn Daten speichern
    Dim i As Integer
    'Debug.Print "dateiname: " + dateiName
    If dateiName = "" Then 'falls keine Datei ausgewählt
    Exit Sub
    Else
    datenPaareDatei = dateiName 'Pfad + name
    Open datenPaareDatei For Random As #1 'Len = Len(data)
    For i = 0 To maxDatenPaare - 1
    Put #1, i + 1, datenPaar(i) 'zeilenweise abspeichern
    Next
    Close #1
    btnDiagram.Enabled = True
    lblStatus.Caption = "Datenspeicherung erfolgreich abgeschlossen!"
    End If
    End Sub
    Private Sub btnDtnRead_Click() 'Btn Daten lesen
    Dim i As Integer

    lblStatus.Caption = ""
    datenPaareDatei = dateiName 'Funktion für Dateiauswahlfenster

    If datenPaareDatei = "" Then 'falls keine Datei ausgewählt
    Exit Sub
    Else
    txtDatenPaare.Text = "" 'Textfeld löschen
    Cls
    Open datenPaareDatei For Random As #1 'Len = Len(data)
    For i = 0 To maxDatenPaare - 1
    Get #1, i + 1, datenPaar(i) 'zeilenweise lesen
    txtDatenPaare.Text = txtDatenPaare.Text + datenPaar(i).monat + ";" + CStr(datenPaar(i).temperatur) + vbNewLine
    Next 'als string wieder hinschreiben
    Close #1
    End If
    btnDtnSave.Enabled = True
    btnDiagram.Enabled = True
    End Sub
    Private Function monatsEingabeOk(ByVal txtDatenFeld As Object, ByRef datenPaar() As datenPaareSatz) As Boolean
    Dim datenPaarZeile() As String
    Dim monatsString As String
    Dim posSemi As Integer
    Dim monats As String
    Dim monatDoppelt As Integer
    Dim i As Integer
    Dim j As Integer
    Dim fehler As Boolean

    monatsEingabeOk = True
    posSemi = 1
    zeichenLaenge = 0

    datenPaarZeile = Split(txtDatenFeld.Text, vbNewLine) 'Lob an Google! spaltet Text in Zeilen am return

    For i = 0 To maxDatenPaare - 1 'Schleife: zeilenweise spalten
    Debug.Print datenPaarZeile(i)

    zeichenLaenge = zeichenLaenge + Len(datenPaarZeile(i + 1)) + 2
    If InStr(datenPaarZeile(i), ";") Then 'falls kein Semikolon in der Zeile
    If InStr(posSemi, datenPaarZeile(i), ";") > 0 Then 'falls kein monat eingegeben
    posSemi = InStr(posSemi, datenPaarZeile(i), ";") - 1 'findet ";" und merkt sich Position
    monatsString = Left$(datenPaarZeile(i), posSemi) 'links neben ";" = monat
    monats = Trim$(monatsString) 'monat ohne Leerzeichen
    Debug.Print "-"; monats; "-"
    Else
    txtDatenPaare.SetFocus
    monatsEingabeOk = False
    fehler = datenFehlerGemeldet(txtDatenPaare, "Monatsbezeichnung fehlt!", ">>> min. 3 Zeichen eingeben!")
    Exit Function
    End If
    Else
    txtDatenPaare.SetFocus
    monatsEingabeOk = False
    fehler = datenFehlerGemeldet(txtDatenPaare, "Semikolon fehlt in dieser Zeile!", ">>> Datenpaar mit Semikolon trennen!")
    Exit Function
    End If
    If Len(monats) < 3 Then 'meckern bei weniger als 3 Zeichen
    txtDatenPaare.SetFocus
    monatsEingabeOk = False
    fehler = datenFehlerGemeldet(txtDatenPaare, "In der Zeile ist die Monatsbezeichnung zu kurz!", ">>> mind. drei Zeichen eingeben!")
    Exit Function
    End If
    If Len(monats) > 3 Then 'nach 3 Zeichen abschneiden
    monats = Left$(datenPaarZeile(i), 3)
    End If
    For j = 0 To i - 1 'Prüfung, ob Monat doppelt: Schleife in Schleife: erst vom Anfang bis jetzige Zeile
    monatDoppelt = InStr(datenPaarZeile(j), monats)
    If monatDoppelt > 0 Then
    txtDatenPaare.SetFocus
    monatsEingabeOk = False
    fehler = datenFehlerGemeldet(txtDatenPaare, "Die Monatsbezeichnung ist doppelt!", ">>> andere Bezeichnung eingeben!")
    Exit Function
    End If
    Next
    For j = i + 1 To maxDatenPaare - 1 'Prüfung, ob Monat doppelt: dann von jetziger Zeile bis Ende Text
    monatDoppelt = InStr(datenPaarZeile(j), monats)
    If monatDoppelt > 0 Then
    txtDatenPaare.SetFocus
    monatsEingabeOk = False
    fehler = datenFehlerGemeldet(txtDatenPaare, "Die Monatsbezeichnung ist doppelt!", ">>> andere Bezeichnung eingeben!")
    Exit Function
    End If
    Next
    datenPaar(i).monat = monats 'nach Prüfung in Datenfeld schreiben
    Next 'Schleife zu ende

    End Function

    Private Function numEingabeOk(ByVal txtDatenFeld As Object, ByRef datenPaar() As datenPaareSatz) As Boolean
    Dim datenPaarZeile() As String
    Dim tempWert As String
    Dim tempZahl As String
    Dim tZahl As Single
    Dim posNewLine As Integer
    Dim posSemi As Integer
    Dim tZahlLong As Long
    Dim fehler As Boolean
    Dim i As Integer

    posNewLine = 1
    posSemi = 1
    zeichenLaenge = 0

    datenPaarZeile = Split(txtDatenFeld.Text, vbNewLine) 'Lob an Google! spaltet Text in Zeilen am return

    For i = 0 To maxDatenPaare - 1 'Schleife: zeilenweise spalten
    posNewLine = InStr(posNewLine, txtDatenFeld.Text, Chr(Asc(vbNewLine))) + 1 'Position return
    posSemi = InStr(posSemi, datenPaarZeile(i), ";") - 1 'Position ";"
    tempWert = Mid$(datenPaarZeile(i), posSemi + 2, posNewLine - posSemi - 1) 'Temperatur = nach ";" und Position return minus Position ";" lang
    zeichenLaenge = zeichenLaenge + Len(datenPaarZeile(i + 1)) + 2

    tempZahl = Trim(tempWert) 'Leerzeichen weg
    If Len(tempZahl) = 0 Then
    txtDatenPaare.SetFocus
    numEingabeOk = False 'meckern wenn nix geschrieben
    fehler = datenFehlerGemeldet(txtDatenPaare, "Die Temperatureingabe fehlt!", ">>> Temperatur eingeben!")
    Exit Function
    ElseIf InStr(1, tempZahl, ".") Then 'EingabeOk
    numEingabeOk = False
    fehler = datenFehlerGemeldet(txtDatenPaare, "falsches Trennzeichen!", ">>> Bitte nur Trennzeichen """", """" eingeben!")
    txtDatenPaare.SetFocus
    numEingabeOk = False
    Exit Function
    ElseIf InStr(1, tempZahl, "(") Or InStr(1, tempZahl, ")") Then
    fehler = datenFehlerGemeldet(txtDatenPaare, "falsche Temperatureingabe!", ">>> Bitte nur Ziffern 0-9 eingeben!")
    txtDatenPaare.SetFocus
    numEingabeOk = False
    Exit Function
    ElseIf Not IsNumeric(tempZahl) Then
    fehler = datenFehlerGemeldet(txtDatenPaare, "falsche Temperatureingabe!", ">>> Bitte nur Ziffern 0-9 eingeben!")
    txtDatenPaare.SetFocus
    numEingabeOk = False
    Exit Function
    ElseIf InStr(1, tempZahl, ",") Then 'Komma intern ersetzen
    tempZahl = Replace(tempZahl, ",", ".")
    End If
    On Error Resume Next
    tZahl = Val(tempZahl) 'in Zahl umwandeln
    errNr = Err.Number
    On Error GoTo 0
    If errNr <> 0 Then
    Select Case errNr
    Case 6
    numEingabeOk = False
    fehler = datenFehlerGemeldet(txtDatenPaare, "Zahl zu groß!", ">>> Temperaturen müssen zwischen 40 und -30°C liegen!")
    Exit Function
    Case Else
    MsgBox "unbekannter Fehler!"
    End Select
    numEingabeOk = False
    Exit Function
    Else
    numEingabeOk = True
    End If
    If tZahl > maxTemp Or tZahl < minTemp Then 'Prüfung, ob Temp im Intervall
    fehler = datenFehlerGemeldet(txtDatenPaare, "Temperaturwert liegt nicht im Intervall!", ">>> Temperaturen müssen zwischen 40 und -30°C liegen!")
    txtDatenPaare.SetFocus
    numEingabeOk = False
    Exit Function
    Else
    tZahl = tZahl * 1000 'irgendwie auf 3 Nachkommastellen trimmen
    tZahlLong = CLng(tZahl)
    tZahl = tZahlLong / 1000
    End If

    datenPaar(i).temperatur = tZahl 'nach Prüfung in Datenfeld schreiben
    Debug.Print "-"; datenPaar(i).temperatur; "-"
    Next 'Schleife zu ende

    End Function

    Private Function datenFehlerGemeldet(txtDatenPaare As Object, ByVal fehlerTxt As String, ByVal hinweisTxt As String) As Boolean

    txtDatenPaare.SetFocus
    txtDatenPaare.SelStart = zeichenLaenge
    MsgBox fehlerTxt + vbNewLine + vbNewLine + hinweisTxt
    datenFehlerGemeldet = True
    End Function


    Private Sub txtDatenPaare_Change()
    btnDtnSave.Enabled = False 'wenn Textfeld geändert
    btnDiagram.Enabled = False 'Btn ausschalten
    lblStatus.Caption = "" 'u. Anzeige löschen
    End Sub

    Private Function dateiName() As String 'liefert Dateiname einschließlich Pfad + Laufwerk
    On Error Resume Next
    fdiaDateiAuswahl.CancelError = True 'fkt. kopiert aus ProSplit
    fdiaDateiAuswahl.DialogTitle = "Datei auswählen"
    fdiaDateiAuswahl.Filter = ".MOTE | *.MOTE"
    fdiaDateiAuswahl.Flags = cdlOFNFileMustExist
    fdiaDateiAuswahl.ShowOpen
    If Err = 0 Then
    dateiName = fdiaDateiAuswahl.FileName
    Else
    dateiName = ""
    End If
    On Error GoTo 0
    End Function


    '***********************************************************************************
    Private Sub btnDiagram_Click()
    frmDiagram.Visible = True
    frmDatenPaare.Visible = False
    End Sub




    Private Sub btnEnde_Click()
    End
    End Sub
    Private Function fehlerGemeldet(txtDatenPaare As Object, ByVal fehlerTxt As String, ByVal hinweisTxt As String, ByVal anfZle As Integer, ByVal endeZle As Integer) As Boolean
    Dim posSemi As Integer
    Dim posNewLine As Integer
    Dim anzSemis As Integer
    Dim anzNewLines As Integer

    Debug.Print "anfZle " & anfZle
    Debug.Print "endeZle " & endeZle
    txtDatenPaare.SetFocus
    txtDatenPaare.SelStart = anfZle
    If anfZle > endeZle Then
    txtDatenPaare.SelStart = endeZle
    End If
    MsgBox fehlerTxt + vbNewLine + vbNewLine + hinweisTxt
    fehlerGemeldet = True
    End Function

    Private Function trennZchnOk(txtDatenFeld As Object, ByRef anzSemis As Integer, ByRef anzNewLines As Integer) As Boolean
    Dim posSemi As Integer
    Dim posNewLine As Integer
    Dim anfZle As Integer
    Dim endeZle As Integer

    Dim fehler As Boolean
    trennZchnOk = True

    posSemi = 1
    posNewLine = 1
    anfZle = 0
    endeZle = 1
    anzSemis = 0
    anzNewLines = 0

    While (InStr(posSemi, txtDatenFeld.Text, ";") > 0) Or (InStr(posNewLine, txtDatenFeld.Text, vbNewLine) > 0)
    If (InStr(posSemi, txtDatenFeld.Text, ";") > 0) Then
    anzSemis = anzSemis + 1
    posSemi = InStr(posSemi, txtDatenFeld.Text, ";") + 1
    endeZle = posSemi
    End If
    If (InStr(posNewLine, txtDatenFeld.Text, Chr(Asc(vbNewLine))) > 0) Then
    anzNewLines = anzNewLines + 1
    posNewLine = InStr(posNewLine, txtDatenFeld.Text, Chr(Asc(vbNewLine))) + 1
    ' endeZle = posNewLine - 1 funktioniert nicht so recht1
    endeZle = posNewLine - 2
    End If
    If (anzSemis < anzNewLines) Or ((posSemi > posNewLine) And (anzSemis = anzNewLines)) Then
    fehler = fehlerGemeldet(txtDatenPaare, "in der Zeile fehlt ein Semikolon!", ">>> Semikolon eingeben!", anfZle, endeZle)
    trennZchnOk = False
    Exit Function
    End If
    If ((anzSemis > anzNewLines + 1) And (posNewLine < posSemi)) Or ((anzSemis > anzNewLines) And (posNewLine > posSemi)) Then
    fehler = fehlerGemeldet(txtDatenPaare, "in der Zeile ist ein (oder mehrere) Semikolon zu viel!", ">>> Semikolon löschen!", anfZle, endeZle)
    trennZchnOk = False
    Exit Function
    End If
    If (anzSemis > maxDatenPaare) Or (anzNewLines > maxDatenPaare) Then
    fehler = fehlerGemeldet(txtDatenPaare, "Zu viele Zeilen!", ">>> nur 12 Zeilen/ Datenpaare eingeben!", anfZle, endeZle)
    trennZchnOk = False
    Exit Function
    End If
    anfZle = posNewLine
    endeZle = posNewLine
    Wend
    If (anzSemis < maxDatenPaare) Or (anzNewLines < maxDatenPaare) Then
    fehler = fehlerGemeldet(txtDatenPaare, "Zeilen fehlen!", ">>> bitte 12 Zeilen/ Datenpaare eingeben!", anfZle, endeZle)
    trennZchnOk = False
    End If
    If (anzSemis >= maxDatenPaare) Or (anzNewLines >= maxDatenPaare) Then
    If Len(txtDatenFeld.Text) > endeZle Then
    fehler = fehlerGemeldet(txtDatenPaare, "zu viele Daten!", ">>> nur 12 Zeilen/ Datenpaare eingeben!", anfZle, endeZle)
    trennZchnOk = False
    End If
    End If
    Debug.Print "anfZle " & anfZle
    Debug.Print "nach while posSemi " & posSemi & " anzSemis " & anzSemis
    Debug.Print "nach while posNL " & posNewLine & " anzNL " & anzNewLines
    End Function


    im anhang befindet sich das original programm..........dickes danke schonmal.

    mfg alex
    Dateien