Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1736to1740
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 nur geänderte TextBox nach Änderung in Tabelle zurückschreiben

UserForm nur geänderte TextBox nach Änderung in Tabelle zurückschreiben
28.01.2020 15:20:57
Andreas
Hallo Excelfreunde,
ich komme seit Tagen einfach nicht mehr weiter. Habe das Forum nach einer Lösung schon mehrmals durchforstet aber komme mit den Lösungsansätzen einfach nicht weiter.
Folgendes Problem:
Ich habe eine UserForm (frm_Ressourcenliste) dort enthalten sind mehrere TextBoxen, ComboBoxen, CheckBoxen, Label, ListBox
Ich lese über einen CommandButton abhängig von Auswahl einer ComboBox in die ListBox dementsprechend Datensätze aus einem Tabellenblatt das als Datenbank dient ein.
Dies funktioniert auch bestens.
Wenn ich jetzt in der ListBox auf einen Datensatz klicke werden die entsprechenden TextBoxen in der UserForm mit dem ausgewählten Datensatz entsprechend gefüllt.
Das klappt auch bestens.
Wenn ich jetzt Änderungen in den TextBoxen vornehme werden diese über den CommandButton (Änderungen eintragen) auch dementsprechend wieder in das Tabellenblatt des entsprechenden Datensatzes an die richtige Stelle zurückgeschrieben.
Das klappt auch bestens.
Nun zu meinem Anliegen:
Ich möchte jetzt aber erreichen wenn ich in einer TextBox etwas ändere (und zwar nur die Textboxen in denen der Anwender wirklich gerade etwas geändert hat), das der geänderte Wert sofort wieder in das Tabellenblatt zurückgeschrieben wird ohne die Schaltfläche (Änderungen eintragen) zu betätigen.
Also so ähnlich wie Change oder Exit Ereignis
Grund dafür ist: wenn ich die Schaltfläche (Änderungen eintragen) betätige, werden die Inhalte aller TextBoxen (auch derer wo keine Änderung stattgefunden hat) wieder in das Tabellenblatt zurück geschrieben (also wie schon gesagt auch der Inhalt der Textboxen wo ich nichts verändert habe) das ist so nicht gewollt.
Es sollen wirklich nur die Daten aus den geänderten TextBoxen in das Tabellenblatt zurück geschrieben werden.
Ist so was möglich und wenn ja wie müsste der Code dafür aussehen und wo müsste ich den Code dafür plazieren.
Mein Makro für die Speicherung der geänderten TextBoxen (über Schaltfläche „Änderung speichern“ sieht im Moment so aus
Der Code ist aber wesentlich länger weil noch mehr TextBoxen und Commandboxen sowie Checkboxen die bei Änderung auch in das Tabellenblatt zurück geschrieben werden.
Dieser Code funktioniert auch bei mir.
Eine Datei kann ich leider nicht hochladen weil diese bereits über 7MB Größe verfügt
'SpeicherMakro
'Schaltfläche "Änderung Eintragen"
'vor dem speichern wird nachgefragt, ob alles richtig eingetragen ist
mldg = "Alles richtig eingetragen ?"
stil = vbYesNo + vbCritical + vbDefaultButton2
titel = "Frage ?"
grc = MsgBox(mldg, stil, titel)
If grc = vbNo Then
Exit Sub
Else
End If
Set WkSh = ThisWorkbook.Worksheets("Erfassung_Bearbeitung")
If frmRessourcenliste.Tag "" Then
'Start
TextBox1.Text = .Cells(varTMP, 2).Value
WkSh.Cells(frmRessourcenliste.Tag, 306) = TextBox4.Value
WkSh.Cells(frmRessourcenliste.Tag, 347) = ComboBox161.Value
WkSh.Cells(frmRessourcenliste.Tag, 13) = TextBox47.Value
WkSh.Cells(frmRessourcenliste.Tag, 335) = TextBox533.Value
WkSh.Cells(frmRessourcenliste.Tag, 11) = TextBox46.Value
WkSh.Cells(frmRessourcenliste.Tag, 336) = TextBox534.Value
WkSh.Cells(frmRessourcenliste.Tag, 10) = TextBox17.Value
If WkSh.Cells(frmRessourcenliste.Tag, 10) Me("TextBox17") Then
WkSh.Cells(frmRessourcenliste.Tag, 10) = Me("TextBox17")
End If
WkSh.Cells(frmRessourcenliste.Tag, 58) = TextBox53.Value
WkSh.Cells(frmRessourcenliste.Tag, 57) = TextBox54.Value
If Me.CheckBox90 = True Then
WkSh.Cells(frmRessourcenliste.Tag, 61).Value = "ja"
Else
WkSh.Cells(frmRessourcenliste.Tag, 61).Value = "nein"
End If
End If
Call TextBox10_Change
End Sub
Brauche wirklich Hilfe
Die Datei soll auf SharePoint von ca.50 Leuten bearbeitet werden. Dabei können schon mal gleichzeitig um die 10 Leute gemeinsam die Datei bearbeiten
Es soll damit verhindert werden, das wenn ein Benutzer Änderungen an der Datei nicht über die Schaltfläche „Änderungen speichern“ aktualisiert seine Daten verloren gehen.
Gäbe es vielleicht auch einen anderen Ansatz wie man das lösen könnte?
Obwohl man in SharePoint gleichzeitig an einer Datei arbeiten kann und Änderungen automatisch gespeichert und aktualisiert werden, gibt es beim speichern (wenn mehrere Benutzer gleichzeitig an der Datei arbeiten) Probleme mit der Datenspeichgerung (zb. Fehler beim Upload)
Kann mir dabei jemand helfen?
So einen Codeschnipsel habe ich auch gefunden.
Kann damit aber wenig anfangen weil ich nicht weiß wo und wie ich den hätte in meinem Makro platzieren können
For ti = 1 To 10
For ci = 0 To UserForm1.Controls.Count - 1
If UserForm1.Controls.Item(ci).Name = "TextBox" & ti Then
MsgBox UserForm1.Controls.Item(ci).Text
End If
Next ci
Next ti
Für eine Hilfe bedanke ich mich bereits jetzt schon im Vorraus
Liebe Grüße Andreas
AW: UserForm nur geänderte TextBox nach Änderung in Tabelle zurückschreiben
28.01.2020 15:42:41
Matthias
Moin!
Also so auf die Schnelle würde ich sagen, du musst jeder Textbox ein eigenes Exit-Ereignis geben, mit dem die Daten gleich zurückgeschrieben werden. Das rückschreiben kannst du ja in eine Prozedur auslagern, die du in dem Ereignis aufrufst und der du den Controlnamen bzw. die TB NUmmer übergibst. Dann brauchst du nur einen Code pflegen.
In dem Speichermakro wirst du das nicht unterbekommen bzw. musst du es ja auch erst aufrufen.
VG
AW: UserForm nur geänderte TextBox nach Änderung in Tabelle zurückschreiben
28.01.2020 16:16:23
Andreas
Hallo Matthias,
Vielen Dank erst einmal für die schnelle Antwort.
Das habe ich mir fast schon gedacht. Dein Vorschlag hört sich erst mal gar nicht so schlecht an. Nur Habe ich im Moment keinen Plan wie der Code dafür aussehen könnte.
. Kannst du mir dafür einen Code schreiben? Wäre dir für die Hilfe echt dankbar. Liebe Grüße und recht herzlichen Dank für Deine Bemühung
Anzeige
AW: UserForm nur geänderte TextBox nach Änderung in Tabelle zurückschreiben
28.01.2020 16:55:41
Andreas
Hatte vergessen noch auf offen zu stellen.
Brauche noch Hilfe Gruß Andreas
AW: UserForm nur geänderte TextBox nach Änderung in Tabelle zurückschreiben
28.01.2020 17:28:10
Matthias
Moin!
Also jetzt ungetestet sollte es so gehen. Diese Prozedur in der UF mit einfügen.
Sub übertragen(boxnr As Long, spalte As Long)
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, spalte) = Me. _
Controls("TextBox" & boxnr).value
End Sub

Deinen Textboxen fügst du jetzt jeweils ein Exit Event ein und rufst die Prozedur auf. Bspw. für zwei deiner Boxen
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call übertragen(4, 306)
End Sub
Private Sub TextBox47_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call übertragen(47, 13)
End Sub

In den Klammern schreibst du erst die Nummer der Textbox und dann die Spalte, in die sie eintragen soll.
WEiß nicht genau, ob das auch problemlos mit mehreren Nutzern klappt.
VG
Anzeige
AW: UserForm nur geänderte TextBox nach Änderung in Tabelle zurückschreiben
28.01.2020 17:58:00
Andreas
Hallo Matthias,
Danke das sieht schon mal sehr gut aus. Komme aber gerade nicht dazu das noch zu testen. Werde es gleich morgen früh auf der Arbeit testen. Ich melde mich dann gleich wenn es geklappt hat.
Danke und liebe Grüße Andreas
AW: UserForm nur geänderte TextBox nach Änderung in Tabelle zurückschreiben
29.01.2020 10:03:52
Andreas
Hallo Matthias,
erst einmal recht herzlichen Dank für Deine Bemühungen
habe deinen Code getestet und für mich jetzt so angepasst
und das funktioniert auch soweit für die TextBox'en und die ComboBox'en in meiner UserForm
'hier werden die Inhalte der TextBox'en bei Änderung sofort in die Tabelle "Erfassung_Bearbeitung" übertragen
Sub übertragen1(boxnr As Long, spalte As Long)
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, spalte) = Me.Controls("TextBox" & boxnr).Value
End Sub
'hier werden die Inhalte der ComboBox'en bei Änderung sofort in die Tabelle "Erfassung_Bearbeitung" übertragen
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 TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call übertragen1(17, 10)
End Sub


Private Sub TextBox46_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call übertragen1(46, 11)
End Sub


Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call übertragen2(2, 12)
End Sub

bis hierhin funktioniert das so wie es soll
Jetzt habe ich aber noch CheckBox'en und wollte das auch so machen wenn ich die jeweilige CheckBox activiere soll entweder ein ja oder ein nein in das Tabellenblatt geschrieben werden.
Mit dem nachfolgenden Code klappt das aber nur teilweise.
Private Sub CheckBox94_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Me.CheckBox94 = True Then
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, 56). _
Value = "ja"
Else
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, 56). _
Value = "nein"
End If
'ComboBox1.SetFocus
End Sub


Private Sub CheckBox95_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Me.CheckBox95 = True Then
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, 56). _
Value = "nein"
Else
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, 56). _
Value = "nein"
End If
'ComboBox1.SetFocus
End Sub
hier passiert jetzt folgendes:
wenn ich die CheckBox94 (steht für "ja") anklicke wird in das Tabellenblatt aber "nein" geschrieben.
wenn ich die CheckBox95 (steht für "nein") anklicke wird in das Tabellenblatt aber "ja" geschrieben.
das ist natürlich falsch und so nicht gewollt.
Wenn ich aber die CheckBox94 verlasse und zB. in die TextBox78 wechsle wird im Tabellenblatt der Inhalt korrekt auf "ja" aktualisiert.
bei der CheckBox95 passiert das gleiche (Inhalt in Tabelle wird korrekt jetzt auf "nein" gesetzt
Was ist am Code falsch und wie müsste das geändert werden?
Hast Du oder jemand anderes dafür eine Lösung?
Bedanke mich bereits im Voraus für Eure Bemühungen
Gruß Andreas
Anzeige
AW: UserForm nur geänderte TextBox nach Änderung in Tabelle zurückschreiben
29.01.2020 10:36:58
SH95
Hallo Andreas,
ist ungetestet, da keine Bsp-Datei vorhanden.
teste mal:
Private Sub CheckBox95_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Me.CheckBox95 = True Then
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, 56). _
Value = "Nein"
Elseif me.checkbox94 = True then
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, 56). _
Value = "Ja"
End If
'ComboBox1.SetFocus
End Sub
Private Sub CheckBox94_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call Checkbox95_Exit
End Sub
Gruß
Stefan
Anzeige
AW: UserForm nur geänderte TextBox nach Änderung in Tabelle zurückschreiben
29.01.2020 11:59:14
Andreas
Hallo SH95,
Danke erst einmal für Deine schnelle Antwort
leider funktioniert das nicht so.
bei deinem Code unten kommt Fehlermeldung "Fehler beim Kompillieren Argument ist nicht optional
Private Sub CheckBox94_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call Checkbox95_Exit
End Sub

Wenn ich den Code so laufen lasse wie unten abgeändert, funktioniert es wenn die CheckBox verlassen wird und ich in die TextBox78 den Cursor setze.
Kann man das eventuell auch automatisch im Code machen lassen.
zB. wenn ich den Haken in CheckBox94 gesetzt habe soll automatisch in die TextBox78 gesprungen werden.
Das gleiche dann eben auch mit der CheckBox95
Hintergrund dabei ist wenn der Anwender die CheckBox nicht verlässt wird auch noch keine Änderung in die Tabelle vorgenommen.
Private Sub CheckBox94_Exit(ByVal Cancel As MSForms.ReturnBoolean)
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, 56). _
Value = "ja"
End Sub


Private Sub CheckBox95_Exit(ByVal Cancel As MSForms.ReturnBoolean)
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, 56). _
Value = "Nein"
End Sub
Wäre schön wenn du mir damit noch helfen könntest.
liebe Grüße Andreas und nochmals danke
Anzeige
AW: UserForm nur geänderte TextBox nach Änderung in Tabelle zurückschreiben
29.01.2020 12:24:47
SH95
Hallo Andreas,
ja das ist durchaus möglich, dafür müsstest du aber das Checkbox_Change/Click ereignis nehmen.
Private Sub CheckBox94_Change()
TextBox1.SetFocus
End Sub
Private Sub CheckBox95_change()
TextBox1.SetFocus
End Sub
Du könntest das dann natürlich vereinfachen, und deinen "kompletten" Code in das Change Ereignis nehmen:
Private Sub CheckBox94_Change()
If Me.checkbox94 = True Then
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, 56). _
Value = "Ja"
End If
TextBox1.SetFocus
End Sub
Private Sub CheckBox95_Change()
If Me.CheckBox95 = True Then
ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(frmRessourcenliste.Tag, 56). _
Value = "Nein"
End If
TextBox1.SetFocus
End Sub

Gruß
Stefan
Anzeige
AW: UserForm nur geänderte TextBox nach Änderung in Tabelle zurückschreiben
29.01.2020 13:11:41
Andreas
Hallo SH95,
besten Dank für deine Hilfe funktioniert bestens
Gruß Andreas
gerne und
29.01.2020 13:55:59
SH95
Herzlichen Dank für die Rückmeldung.
Viel Spaß noch.
Gruß
Stefan

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige