Transfer Userform-Tabelle und zurück
18.06.2007 14:40:00
Thomas
ich bin gerade mal wieder am Verzweifeln und brauche dringend Hilfe. Ich habe ein Programm in Arbeit, bei dem Daten in eine Userform eingegeben werden. Datumswerte, einfache Zahlen, Beträge, Texte, auch Optionen, Comboboxen und Checkboxen. Beträge und Datumswerte werden sofort nach dem Eintragen entsprechend schon für die Anzeige formatiert. Zum Berechnen und auch zum Speichern werden die Daten jeweils in Tabellenblätter übertragen. Meist läuft das völlig problemlos. Mir ist klar, dass in Userformen nur Text steht. Aber plötzlich spinnt Excel und macht aus Zahlen Datumswerte oder aus Datumswerten Zahlen. Aber nicht durchgängig, sondern nur bei einzelnen Textfeldern. Beim Zurücklesen die Userform wird dann der tatsächliche Zelleninhalt verwendet und damit steht totaler Mist in der Anzeige. Das Schreiben in die Tabelle erfolgt nach dem Muster:
Dim tb As Object
For Each tb In fmStart.Controls
If TypeName(tb) = "TextBox" Then
Cells(DZeile, 1).Value = "Text"
Cells(DZeile, 2).Value = tb.Name
Cells(DZeile, 3).Value = tb.Text
......
Nach dem ersten Auftreten des Problems habe ich versucht, beim Schreiben in die Zelle zunächst über isDate(...) die Datumswerte gezielt zu formatieren. Das schien zunächst zu funktionieren. Plötzlich wurden aber auch aus Zahlen Datumswerte. Nun habe ich mit IsNumeric(...) und der Unterscheidung, ob die "numerischen Zeichenketten" ein Komma enthalten (=Beträge) oder keins (=einfache Zahlen), weitere Formatierungshilfen zu geben. Der Code ist sicher etwas umständlich (ich habe mich stückweise herangetastet), aber leider funktioniert er sowieso nicht zuverlässig.
'Formatierungsprobleme bei Speicherung von Zahlen und Datum
If IsDate(tb.Text) = True Then 'Datumsformat
Cells(DZeile, 3).Value = Format(Cells(DZeile, 3), "dd.mm.yyyy")
Else
If IsNumeric(tb.Text) = True Then 'Zahlenformat
Dim i As Integer
Dim Komma As Boolean
Komma = False
For i = 1 To Len(tb.Text)
If Mid(tb.Text, i, 1) Like "," Then Komma = True
Next i
If Komma = True Then
'MsgBox "Zahl mit Komma! " & tb.Text
Cells(DZeile, 3).Value = Format(Cells(DZeile, 3), "#,##0.00")
Else
'MsgBox "Zahl ohne Komma! " & tb.Text
Cells(DZeile, 3).Value = Format(Cells(DZeile, 3), "000")
End If
End If
End If
Wie löst man nun dieses Problem? Wie kann man Excel zur Vernunft bringen?
Vielen Dank im Voraus.
Thomas