PDA

Vollständige Version anzeigen : Zahlen aus Textboxen. Mysteriöse Sache...


Feng Bo
23.08.2017, 13:53
Hallo zusammen,

ich stehe mal wieder von einem Mysterium. Ich habe eine Userform mit Textboxen, in die Zahlen eingetragen werden. Diese werden in der aktiven Zeile in bestimmte Spalten, also Zellen geschrieben.

Lustig: Das hat tagelang funktioniert. Auf einmal folgendes:
Ich übergebe die Werte per CommandButton an die Zellen. Diese werden auch übertragen.
ABER: In der Summe wird der neue Wert nicht berücksichtigt, obwohl die befüllten Zellen eindeutig in der Range liegen. Gehe ich dann auf die betroffene Zelle, drücke F2 und Enter, aktualisiert sich die Summe.
Ich kann es mir überhaupt nicht erklären.

Hat bitte jemand Rat für mich?
LG

Beverly
23.08.2017, 13:57
Hi,

mit welchem Befehl trägst du die TextBox-Inhalte ins Tabellenblatt ein? Eventuell sind die Neueinträge je Text und keine Zahlen weil die Zellen vorher als Text formatiert waren?

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Feng Bo
23.08.2017, 14:03
Hi Karin, also die Zellen sind vorab alle als Zahl formatiert.
Dies sind die beiden Codes:



Private Sub CommandButton1_Click()
If TextBox1 = "" Then MsgBox "Bitte alle Felder befüllen.": Exit Sub
If ComboBox1 = "" Then MsgBox "Bitte alle Felder befüllen.": Exit Sub
If TextBox2 = "" Then MsgBox "Bitte alle Felder befüllen.": Exit Sub
If TextBox4 = "" Then MsgBox "Bitte alle Felder befüllen.": Exit Sub

ActiveSheet.Unprotect Password:="XXX"
ActiveSheet.Range("A500").End(xlUp).Offset(1, 0).Value = Me.TextBox1
ActiveSheet.Range("B500").End(xlUp).Offset(1, 0).Value = Me.ComboBox1
ActiveSheet.Range("C500").End(xlUp).Offset(1, 0).Value = Me.TextBox2 --> Die besagte Codezeile
ActiveSheet.Range("F500").End(xlUp).Offset(1, 0).Value = Me.TextBox4 & "%"
Unload Me
Call Sort_Ver
MsgBox "Projekt " & TextBox1.Value & " erfolgreich eingetragen."
ActiveSheet.Protect Password:="XXX"
Application.Goto reference:=Cells(1, "K"), Scroll:=True
Application.Goto reference:=Cells(1, "A"), Scroll:=True
End Sub


Option Explicit

Private Sub CommandButton1_Click()
ActiveSheet.Unprotect Password:="XXX"
Cells(ActiveCell.Row, 1).Value = Me.TextBox1
Cells(ActiveCell.Row, 2).Value = Me.ComboBox1
Cells(ActiveCell.Row, 3).Value = Me.TextBox2 --> Die besagte Codezeile
Cells(ActiveCell.Row, 6).Value = Me.TextBox4 & "%"
ActiveSheet.Protect Password:="XXX"
Unload Me
End Sub

Feng Bo
23.08.2017, 14:34
Lösung gefunden! :)

"Einfach" überall am Ende noch .value anfügen, dann klappt es.

Mich wundert aber nur, dass es bis vorgestern auch ohne .value geklappt hat...

Danke Karin und LG

Storax
23.08.2017, 14:38
Kann es eigentlich nicht sein, denn .value ist die Default Property
Das ist irgendein anderes Problem! Das taucht nochmal auf...

Beverly
23.08.2017, 14:51
Hi,

TextBoxen beinhalten (wie der Name schon impliziert) IMMER Text, deshalb wandelt man den TextBox-Inhalt immer in das betreffende Zahlenformat um, bevor man ihn in eine Zelle schreibt oder damit rechnet: z.B. Range("A1") = CDbl(TextBox) für eine Dezimalzahl.

Zellen, die bereits mal als Text formatiert waren (z.B. durch Einträge aus TextBoxen die nicht in Zahlen umgewandelt wurden), lassen sich nicht durch einfaches Ändern des Zellformates wieder in Standard umwandeln. Der eifnachste Weg: schreibe eine 1 in eine bisher nicht genutze Zelle, kopiere diese Zelle, markiere den zu formatierenden Bereich und dann Einfügen -> Inhalte einfügen -> Multiplizieren. Damit haben die Zellen dann das Standardformat wieder.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Feng Bo
24.08.2017, 11:39
Hallo, ich verzweifle langsam...

Hier mal mein Code, bitte helft mir.

Private Sub CommandButton1_Click()
ActiveSheet.Unprotect Password:="XXX"
ActiveSheet.Cells(16, Columns.Count).End(xlToLeft).Offset(0, 1) = TextBox1.Value 'Textwert
ActiveSheet.Cells(16, Columns.Count).End(xlToLeft).Offset(-3, 0) = TextBox2.Value 'Zahlenwert
ActiveSheet.Cells(16, Columns.Count).End(xlToLeft).Offset(-7, 0) = TextBox3.Value 'Zahlenwert
ActiveSheet.Cells(16, Columns.Count).End(xlToLeft).Offset(-6, 0) = TextBox4.Value 'Zahlenwert
ActiveSheet.Cells(16, Columns.Count).End(xlToLeft).Offset(-5, 0) = TextBox5.Value 'Zahlenwert

Call Sort_Hor
Call Back
Unload Me
ActiveSheet.Protect Password:="XXX"
End Sub

LG

PS: Alle Zahlen haben eine Nachkommastelle.

Feng Bo
24.08.2017, 12:22
OMG, ich glaube ich habe es hinbekommen. Eigentlich viel einfacher als gedacht. Mal gespannt, wie lange das funzt. ^^

Private Sub CommandButton1_Click()
ActiveSheet.Unprotect Password:="XXX"
ActiveSheet.Cells(16, Columns.Count).End(xlToLeft).Offset(0, 1) = TextBox1.Value
ActiveSheet.Cells(16, Columns.Count).End(xlToLeft).Offset(-3, 0) = TextBox2.Value * 1
ActiveSheet.Cells(16, Columns.Count).End(xlToLeft).Offset(-7, 0) = TextBox3.Value * 1
ActiveSheet.Cells(16, Columns.Count).End(xlToLeft).Offset(-6, 0) = TextBox4.Value * 1
ActiveSheet.Cells(16, Columns.Count).End(xlToLeft).Offset(-5, 0) = TextBox5.Value * 1

Call Sort_Hor
Call Back
Unload Me
ActiveSheet.Protect Password:="XXX"
End Sub

* 1

Was zwei Zeichen bewirken... :)

LG und vielen Dank an alle für die Hilfe!

Beverly
24.08.2017, 13:41
Ich würde vorher prüfen, ob die TextBoxen leer sind, denn andernfalls gibt es eine Fehlermeldung (ungetestet da Mappe nicht vorliegt):

Private Sub CommandButton1_Click()
With ActiveSheet
.Unprotect Password:="XXX"
.Cells(16, Columns.Count).End(xlToLeft).Offset(0, 1) = _
TextBox1.Value 'Textwert
If TextBox2.Value <> "" Then _
.Cells(16, Columns.Count).End(xlToLeft).Offset(-3, 0) = _
CDbl(TextBox2.Value) 'Zahlenwert
If TextBox3.Value <> "" Then _
.Cells(16, Columns.Count).End(xlToLeft).Offset(-7, 0) = _
CDbl(TextBox3.Value) 'Zahlenwert
If TextBox4.Value <> "" Then _
.Cells(16, Columns.Count).End(xlToLeft).Offset(-6, 0) = _
CDbl(TextBox4.Value) 'Zahlenwert
If TextBox5.Value <> "" Then _
.Cells(16, Columns.Count).End(xlToLeft).Offset(-5, 0) = _
CDbl(TextBox5.Value) 'Zahlenwert
Call Sort_Hor
Call Back
Unload Me
.Protect Password:="XXX"
End With
End Sub



Außerdem kann man mit einer With-Anweisung auf ActiveSheet den Code etwas vereinfachen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>