Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1740to1744
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
Inhaltsverzeichnis

UserForm TextBox If Then

UserForm TextBox If Then
21.02.2020 08:38:04
Andreas
Hallo Excelfreunde,
stehe mal wieder vor einem Problem wo ich Eure Hilfe benötige.
Ich habe in einer UserForm1 mehrere TextBox'en und ComboBox'en
diese werden über eine Auswahl (wenn ich den entsprechenden Datensatz in der ListBox1 markiere) aus der ListBox1 entsprechend befüllt und dienen als Ansicht und Eingabe für ein Formular das der Anwender auch bei Bedarf ändern kann. Demzufolge werden die geänderten Werte auch wieder ordnungsgemäß in die Ursprungstabelle zurückgeschrieben.
das mache ich derzeit mit folgenden Code.
'+++
Sub übertragen1(boxnr As Long, spalte As Long)
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, spalte) = Me.Controls("TextBox" & boxnr).Value
End Sub '+++
'+++
Sub übertragen2(boxnr As Long, spalte As Long)
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, spalte) = Me.Controls("ComboBox" & boxnr).Value
End Sub '+++
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call übertragen1(4, 306)
End Sub


Private Sub ComboBox161_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call übertragen2(161, 347)
End Sub
das funktioniert in meinem Fall auch recht gut.
Habe aber jetzt folgendes Problem:
Ich möchte wenn der User in irgendeiner TextBox oder ComboBox den Wert ändert (aber nur wenn er wirklich ändert zB. steht in der TextBox der Wert "Test" und der User ändert diesen Wert in "Test1" oder in der ComboBox wird durch Auswahl eines Dropdown Wertes der Wert geändert) dann soll anhand des nachfolgenden Codes der Username und das Datum der Änderung protokolliert werden. Aber nur in dem entsprechend ausgewählten Datensatz.
WkSh.Cells(frmRessourcenliste.Tag, 420) = Environ("username") 'PD/420 Username
WkSh.Cells(frmRessourcenliste.Tag, 421) = Now 'PE/421 aktuelles Datum
ich hatte versucht das so zu lösen. Hat aber nicht zum Erfolg geführt.++
'+++
Sub übertragen1(boxnr As Long, spalte As Long)
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, spalte) = Me.Controls("TextBox" & boxnr).Value
WkSh.Cells(frmRessourcenliste.Tag, 420) = Environ("username") 'PD/420 Username
WkSh.Cells(frmRessourcenliste.Tag, 421) = Now 'PE/421 aktuelles Datum
End Sub '+++
'++
in diesem Code werden zwar der Username und das Datum entsprechend in der Tabelle eingetragen und protokolliert.
Aber eben auch wenn ich in der Text nichts ändere. (zB. vorher stand "Test" und ich verlasse die TextBox wieder ohne den Wert geändert zu haben) wird mir trotzdem der Username und das Datum protokolliert.
Die ist aber so nicht gewünscht. Sondern wirklich nur wenn sich der Wert aus der TextBox vonn leer auf gefüllt oder von dem vorher eingelesenen Wert (zB. "Test" auf "Test1" ändert)
Ich hoffe ich habe mein Problem einigermaßen verständlich erklärt.
Kann mir jemand den Code dafür nennen und bei der Lösung behilflich sein?
Bedanke mich jetzt schon für Eure Unterstützung und Hilfe.
Danke Andreas

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UserForm TextBox If Then
21.02.2020 08:54:22
Andreas
Hallo Excelfreunde, zur Ergänzung (Beitrag noch offen)
Habe noch was versucht.aber auch nicht der richtige Erfolg.
Kann leider auch die Datei nicht hochladen weil sie einfach schon zu groß ist.
Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim tx1 As Boolean
Call übertragen1(17, 10)
If Me.TextBox17.Value = Me.TextBox17.Tag Then tx1 = True
If tx1 = True Then
MsgBox "nix geändert"
Else
MsgBox "Box17 wurde geändert!"
End If
End Sub
hier kommt aber immer die Meldung "Box17 wurde geändert"
obwohl ich den vorherigen Wert nicht geändert habe.
Wenn die TextBox aber von vornherein leer war und ich die TextBox verlasse dann zeigt mir die MsgBox "nix geändert" in diesem Fall auch korrekt an.
Was mache ich Falsch?
nochmals Danke Andreas
Anzeige
AW: UserForm TextBox If Then
21.02.2020 09:08:58
fcs
Hallo Andres,
dieser Weg funktioniert natürlich nur, wenn du beim Einlesen der Werte in die Boxen, den Wert gleichzeitig in die Tag-Eigenschaft übernimmst.
Damit nur etwas in die Zellen geschrieben wird, wenn sich der Inhalt der Box geändert hat, musst du Call-Anweisung mit in einen der beiden IF-Teile schieben.
Mein Vorschlag ist etwas eleganter, dann muss du nicht für jede Box den Prüfcode ergänzen, sondern nur einmalig die Eintragen-Prozedur.
LG
Franz
Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim tx1 As Boolean
If Me.TextBox17.Value = Me.TextBox17.Tag Then tx1 = True
If tx1 = True Then
MsgBox "nix geändert"
Else
Call übertragen1(17, 10)
MsgBox "Box17 wurde geändert!"
End If
End Sub

Anzeige
AW: UserForm TextBox If Then
21.02.2020 09:47:02
Andreas
Hallo Franz,
habe das jetzt nochmals so getestet
Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim tx1 As Boolean
If Me.TextBox17.Value = Me.TextBox17.Tag Then tx1 = True
If tx1 = True Then
MsgBox "nix geändert"
Else
Call übertragen1(17, 10)
MsgBox "Box17 wurde geändert!"
End If
End Sub
wenn ich den Wert zB."10" ändere in zB. "1000" wird "Box17 wurde geändert" angezeigt
wenn ich den Wert nicht ändere wird mir trotzdem "Box17 wurde geändert" angezeigt
wenn ich den Wert (vorher zB. "10") in der Text Box lösche und es steht nichts mehr in der TextBox dann wird mir angezeigt MsgBox "nix geändert"
und das darf aber so nicht sein.
brauche nochmals Hilfe?
Anzeige
AW: UserForm TextBox If Then
21.02.2020 09:55:21
fcs
Hallo Andreas,
du musst, wie schon geschrieben, wenn du die Werte in die Boxen einliest zusätzlich den Wert auch in der Tag-Eigenschaft der jeweiligen Box speichern.
Beispiel:
    Me.Textbox17 = Me.Listbox1.List(Me.Listbox1.Listindex ,2)
Me.Textbox17.Tag = Me.Listbox1.List(Me.Listbox1.Listindex ,2)

Aber mache es nicht unnötig kompliziert, vergleich mit der Texteigenschaft der Zellen - das sollte funktionieren.
LG
Franz
AW: UserForm TextBox If Then
21.02.2020 09:00:42
fcs
Hallo Andreas,
vergleiche vor dem Eintragen den Wert der Textbox mit dem aktuellen Inhalt in der jeweiligen Zelle. Wenn übereinstimmend, dann nichts eintragen.
Sub übertragen1(boxnr As Long, spalte As Long)
If Me.Controls("TextBox" & boxnr).Value  _
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag,  _
spalte).Text Then
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, spalte) = _
_
Me.Controls("TextBox" & boxnr).Value
WkSh.Cells(frmRessourcenliste.Tag, 420) = Environ("username") 'PD/420 Username
WkSh.Cells(frmRessourcenliste.Tag, 421) = Now 'PE/421 aktuelles Datum
End If
End Sub
Als Alkternative könntest du auch beim Einlesen der Werte in die Textboxen/Comboboxen den Wert gleichzeitig in die Tag-Eigenschaft speichern. In der Eintragen-Prozedur vergleichst du dann den Inhalt der Tag-Eigenschaft mit dem Wert der Box und trägst nur ein wenn beide verschieden sind.
LG
Franz
Anzeige
AW: UserForm TextBox If Then
21.02.2020 09:20:28
Andreas
Hallo Franz,
Sub übertragen1(boxnr As Long, spalte As Long)
If Me.Controls("TextBox" & boxnr).Value  ThisWorkbook.Worksheets("Erfassung_Bearbeitung"). _
Cells(frmRessourcenliste.Tag, spalte).Text Then
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, spalte) = _
Me.Controls("TextBox" & boxnr).Value
WkSh.Cells(frmRessourcenliste.Tag, 420) = Environ("username") 'PD/420 Username
WkSh.Cells(frmRessourcenliste.Tag, 421) = Now 'PE/421 aktuelles Datum
End If
End Sub
jetzt bekomme ich bei dieser Zeile eine Fehlermeldung:
Fehler beim kompilieren Variable nicht definiert
WkSh.Cells(frmRessourcenliste.Tag, 420) = Environ("username") 'PD/420 Username
könntest du bitte nochmals helfen?
Als Alkternative könntest du auch beim Einlesen der Werte in die Textboxen/Comboboxen den Wert gleichzeitig in die Tag-Eigenschaft speichern. In der Eintragen-Prozedur vergleichst du dann den Inhalt der Tag-Eigenschaft mit dem Wert der Box und trägst nur ein wenn beide verschieden sind.
was meinst du damit?
Wie müsste der Code dafür aussehen?
Anzeige
AW: UserForm TextBox If Then
21.02.2020 09:48:42
fcs
Hallo Andreas,
wahrscheinlich ist der Variablen WkSh kein Tabellenblatt zugewiesen, deshalb der Fehler.
Probiere es mal so.
Sub übertragen1(boxnr As Long, spalte As Long)
Dim WkSh As Worksheet
Set WkSh = ThisWorkbook.Worksheets("Erfassung_Bearbeitung")
If Me.Controls("TextBox" & boxnr).Value  WkSh.Cells(frmRessourcenliste.Tag, spalte).Text  _
Then
WkSh.Cells(frmRessourcenliste.Tag, spalte) = Me.Controls("TextBox" & boxnr).Value
WkSh.Cells(frmRessourcenliste.Tag, 420) = Environ("username") 'PD/420 Username
WkSh.Cells(frmRessourcenliste.Tag, 421) = Now 'PE/421 aktuelles Datum
End If
End Sub
Tag:
so wie du mit frmRessourcenliste.Tag die Zeilennummer über die Tag-Eigenschaft des Userforms verwaltest, könntest du die aktuellen Werte beim Einlesen in die Boxen nach Auswahl in deiner Listbox zusätzlich auch in die Tag-Eigenschaft schreiben. So könntest du vor dem Eintragen die Werte vergleichen zu können. Aber das ist natürlch koplizierter, als mit dem Inhalt der Zellen zu vergleichen.
LG
Franz
Anzeige
AW: UserForm TextBox If Then
21.02.2020 09:58:36
Andreas
Hallo Franz,
wahrscheinlich ist der Variablen WkSh kein Tabellenblatt zugewiesen, deshalb der Fehler.
Probiere es mal so.
Sub übertragen1(boxnr As Long, spalte As Long)
Dim WkSh As Worksheet
Set WkSh = ThisWorkbook.Worksheets("Erfassung_Bearbeitung")
If Me.Controls("TextBox" & boxnr).Value  WkSh.Cells(frmRessourcenliste.Tag, spalte).Text   _
_
Then
WkSh.Cells(frmRessourcenliste.Tag, spalte) = Me.Controls("TextBox" & boxnr).Value
WkSh.Cells(frmRessourcenliste.Tag, 420) = Environ("username") 'PD/420 Username
WkSh.Cells(frmRessourcenliste.Tag, 421) = Now 'PE/421 aktuelles Datum
End If
End Sub

das war es. Jetzt klappt alles. super und nochmals Danke
Problem gelöst
Anzeige
AW: UserForm TextBox If Then
21.02.2020 09:48:54
Andreas
mein vorletzte Anfrage ist auch noch offen hatte nur vergessen auf offen zu stellen
Danke Andreas

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige