Anzeige
Archiv - Navigation
924to928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
924to928
924to928
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Problem mit Textbox

Problem mit Textbox
10.11.2007 13:18:59
Sebastian
Hallo Experten!
Ich habe mal wieder ein kleines Problemchen, was für euch sicher leicht und schnell zu lösen ist. Folgende Beschreibung:
Ich verwende als Eingabemaske zur Erfassung von Daten ein VBA-Formular mit mehreren Textboxen. An einigen Stellen sollen Zahlen eingegeben werden, die auch schon mal bis zu 9-stellig sein können. Der Übersichtlichkeit halber möchte ich "," als 1000er-Trennzeichen verwenden, und zwar so dass der eingegebene Wert beim Verlassen der Textbox gleich umformatiert wird. Im Grunde genommen will ich das gleiche Eingabeverfahren haben, wie man es aus Excel mit einer entsprechend formatierten Zelle kennt.
Ich habe also ins Exit ereignis meiner Textboxen folgendes geschrieben:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox1
.Text = Format(.Text, "#,##")
End With
End Sub


So weit so gut. Mein Problem dabei ist folgendes:
Nachkommastellen werden nicht erfasst.
Mir ist klar, dass ich die Textbox auch mit Nachkommastellen formatieren kann, diese möchte ich aber in der Textbox nicht sehen. Im Grunde genommen möchte ich die Textbox genauso haben wie eine Zelle bei der Eingabe in Excel, und zwar dass die Nachkommastellen zwar erfasst sind, aber nicht sichtbar sind. Bei einer Excel-Zelle ist ja bei der Eingabe der Zahl 12345.67 in eine Zelle, die mit 0 Dezimalstellen und mit 1000er Trennzeichen formatiert ist , folgendes sichtbar: 12,346. Für weitere Berechnungen wird dann dennoch mit 12345.67 weitergerechnet.
Auch bei mir werden die Werte weiterverwendet und die korrekte Erfassung der Nachkommastellen ist extrem wichtig. Wie formatiere ich meine Textbox um, so dass die gerundeten und formatierten Werte sichtbar sind, trotzdem beim Auslesen der exakte WErt verwendet wird?
Ich hoffe ich konnte mein Problem einigermaßen rüberbringen und bin gespannt auf Antworten.
Bis dahin beste Grüße,
Sebastian

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit Textbox
10.11.2007 13:44:00
Ramses
Hallo
"..Wie formatiere ich meine Textbox um, so dass die gerundeten und formatierten Werte sichtbar sind, trotzdem beim Auslesen der exakte WErt verwendet wird?..."
Das geht ganz einfach nicht. Begreift doch endlich mal, dass eine Textbox eine Textbox ist und keine Zelle in der Tabelle !!!
Der einzige Workaround:
Arbeite mit einer Spiegel-Textbox die den originalen Wert enthält, und NICHT verändert wird und NICHT sichtbar ist.
Die Darstellung erfolgt in einer anderen Textbox wo die Werte verändert dargestellt werden.
Allerdings hast du dann das gleiche Problem wenn in der sichtbaren TExtbox etwas verändert werden soll.
Gruss Rainer

Anzeige
AW: Problem mit Textbox
10.11.2007 14:02:06
Sebastian
Hallo Rainer!
Oha diese Frage scheint ja schon das eine oder andere Mal aufgetaucht zu sein. Ich habe mir mehrere Artikel zum Thema "Textbox formatieren" durchgelesen, und bin bisher noch nicht darauf gestoßen. Dass eine Textbox eine Textbox ist und keine Zelle in der Tabelle habe ich dann jetzt hiermit begriffen.
Nichtsdestotrotz suche ich eine Lösung für mein Problem. Geht nicht gibts nicht ;-)
Das mit der Spiegel-Textbox hört sich ja schon mal interessant an. Allerdings muss die Möglichkeit einer späteren Veränderung schon gegeben sein.
Ich hatte darüber nachgedacht, die Werte der Textbox VOR dem Formatieren irgendwie in eine Variable o.ä. zu schreiben, so dass in der Textbox-Anzeige der formatierte Wert auftaucht, zum Auslesen aber der exakte Wert, der in der Variable steht, verwendet wir. Im Prinzip ein ähnlicher Ansatz wie der mit der Spiegel-Textbox, nur dass man die Textbox dann wieder verändern kann, oder? Leider habe ich zu wenig Ahnung von Variablen etc. und weiß nicht ob sowas umsetzbar ist.
Kannst du dir vorstellen, dass es so klappen könnte oder hätte so eine Methode auch wiederum Nachteile?
Danke schon mal für eine Antwort. Gruß,
Sebastian

Anzeige
AW: Problem mit Textbox
10.11.2007 14:12:00
Ramses
Hallo
"..Geht nicht gibts nicht ;-).."
Mit vernünftigem Aufwand,... eben schon bzw. nicht.
"..zum Auslesen aber der exakte Wert, der in der Variable steht,..."
Das ist doch Quatsch.
Du willst doch anscheinend einen veränderten Wert, was also willst du in der Variable zwischenspeichern, und für welche "exakte" Weiterberechnung soll das dann gut sein ?!!
"...Leider habe ich zu wenig Ahnung von Variablen etc. und weiß nicht ob sowas umsetzbar ist. ..."
Dann lass es bleiben. Auch ich würde niemals mit solchen Verrenkungen in einer Textbox arbeiten.
Entweder die Werte werden so angezeigt wie sie in der Tabelle stehen wenn ich sie weiterverwenden will für eine Berechnung, und dann aber ohne Formatierung und sonstigen Schnickschnack.
Alles andere (Änderungen usw.) lässt sich mit vernünftigem prgroammtechnischen Aufwand einfach nicht sicher abfangen, wenn damit ein Zellinhalt geändert werden soll für eine weitere Berechnung.
Sorry,.. vielleicht macht das ein anderer, daher die Frage noch auf "Offen"
Ich halte mich da auf jeden Fall raus.
Nur zur Info:
Alleine die vollständige prüfung einer gültigen Datumseingabe in einer Textbox erfordert 132 Zeilen Code !!
Da ist noch nicht mal geprüft ob die Datumseingabe Sinn macht, sondern wirklich nur ob das Datum ein gültiges Format hat !!
Gruss Rainer

Anzeige
AW: Problem mit Textbox
10.11.2007 14:29:00
Sebastian
Hallo Rainer!
off-topic: Ist ja nett, wenn du mir helfen willst, aber das Ganze als Quatsch abzutun ist an dieser Stelle wenig konstruktiv. Es reicht, wenn du erwähnst, dass es aus deiner Sicht schwer bzw. nicht mit angemessenem Aufwand umzusetzen ist.
back to topic:

Du willst doch anscheinend einen veränderten Wert, was also willst du in der Variable zwischenspeichern, und für welche "exakte" Weiterberechnung soll das dann gut sein ?!!


Eben nicht! Ich will keinen veränderten Wert, sondern den Original-Wert, der in die Textbox eingetragen wurde. Wenn ich diesen im exit-Ereignis VOR der Formatierung zwischenspeichere, müsste ich ihn dann doch auch für die spätere Weiterverarbeitung wiederverwenden können. Was spricht dagegen?

Anzeige
AW: Problem mit Textbox
10.11.2007 14:38:00
Ramses
Hallo
"..aber das Ganze als Quatsch abzutun..."
Tu ich ja nicht, sondern lediglich den Versuch "zwei" Werte unterschiedlichen Inhalts an eine Textbox zu koppeln.
"...Eben nicht! Ich will keinen veränderten Wert, sondern den Original-Wert, der in die Textbox eingetragen wurde...."
Wozu dann den ganzen Aufwand ?
Der Originalwert steht doch nach wie vor in der Zelle, also kannst du in dann von da erneut auslesen und weiterverwenden.
Gruss Rainer

AW: Problem mit Textbox
10.11.2007 14:47:00
Sebastian
Hallo nochmal Rainer!
Ich glaube hier liegt ein kleines Mißverständnis vor. Es handelt sich wie gesagt um eine Eingabemaske. Daher steht gar kein Wert in irgendeiner Zelle. Der Wert, um den es geht, wird im Userform in die Textbox eingetragen. Ich möchte, dass der Wert, der in der Textbox sichtbar ist, beim Verlassen der Textbox umformatiert wird. Am Ende meiner Eingabemaske befindet sich ein Button, der das Speichern der in den Textboxen befindlichen Werte in eine Tabelle auslöst. Da der eingegebene Originalwert durch das Formatieren aber verändert bzw. gerundet wurde, suche ich nach einer Möglichkeit zum Zwischenspeichern des Originalwertes.
Sowas müsste doch ohne zu großen Aufwand gehen, oder?

Anzeige
AW: Problem mit Textbox
10.11.2007 19:59:00
Ramses
Hallo
"..Da der eingegebene Originalwert durch das Formatieren aber verändert bzw. gerundet wurde, suche ich nach einer Möglichkeit zum Zwischenspeichern des Originalwertes...."
Tut mir leid, ich versteh's nicht, bzw. ich versteh es schon, aber der Sinn ist mir völlig schleierhaft.
Wenn der Anwender einen Wert eingibt, dann lass den Wert doch, schreib ihn in die Zelle und formatiere den Wert dort.
Es macht doch keinen Sinn, einen Eingabewert von z.B. 2.53 auf 2.50 aus optischen Gründen zu runden.
Wenn der Anwender den Wert dann anschliessend nochmals ändert, bloss weil er vielleicht glaubt einen falschen Wert eingegebenzu haben, musst du diesen ja wieder runden und wieder in der Variablen speichern.
Sorry, ein solches Vorgehen in einer EINGABEMASKE erschliesst sich mir einfach nicht.
Der einfachste Weg für sowas:
Schreib den Originalwert ifor dem umformatieren in ein sichtbares gesperrtes Textfeld und verwende diesen Wert für die Tabelle.
Gruss Rainer

Anzeige
AW: Problem mit Textbox
10.11.2007 14:05:00
Tino
Hallo,
mit einem Trick könnte es gehen, benutze den Kommentar als ganze Zahl und die anzeige Text als gerundeten Wert, zum rechnen nimmst du den Kommentar.
Bsp.:
Me.TextBox1.ControlTipText = "12,5232536"
Me.TextBox1.Text = Round(Me.TextBox1.ControlTipText * 1, 2)
Gruss
Tino

AW: so könnte es auch funktionieren
10.11.2007 22:50:00
Tino
Hallo,
eine weitere Möglichkeit ist, du übergibst die originalwerte in eine Variable die du zuvor als Public Deklarierst. Dies hätte den Vorteil, bei beenden aller VBA- Code (Userformen Makros usw.) stehen diese in der Variablen bis zur Änderung auch in anderen Makros wieder zur Verfügung (werden nicht gelöscht)
Bsp:
In einem Modul angeben
Public Meine_Zahl As Double
In der Userform
Meine_Zahl = "22,569872456"
Me.TextBox1.Text = Round(Meine_Zahl, 2)
Nun nach beenden aller Makros, steht dieser Wert direkt wieder zur Verfügung.
Nur mit der Menge der Public’s sollte es man nicht zu heftig treiben, hat irgendetwas mit Speicherbelegung zu tun.
ich hoffe das was ich hier zusammengetippt habe kann man verstehen.
Gruss
Tino

Anzeige
AW: Problem mit Textbox
10.11.2007 22:18:04
Gerd
Hallo Sebastian,
so etwa (Textbox-Textformat für deine xl-Version ggf. noch anpassen).
Option Explicit
Public TB1Lang As Double

Private Sub CommandButton1_Click()
Tabelle1.Cells(1, 1).Value = TB1Lang
End Sub



Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Application.EnableEvents = False
TB1Lang = TextBox1.Value
TextBox1.Text = Format(TextBox1.Value, "#,##0")
Application.EnableEvents = True
End Sub


AW: Problem mit Textbox
11.11.2007 03:00:17
Sebastian
Super so funktioniert es doch wie ich es mir vorgestellt habe!!!
@all: vielen Dank für Eure Hilfe und sorry noch mal falls ich mich mißverständlich ausgedrückt hatte.
Gruß,
Sebastian
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige