Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Daten aus Listbox in Textbox,dort Anzeigen und ändern, anschließend zurückschreiben i
#11
Hallo Sabina,

(05.03.2019, 11:06)Flotter Feger schrieb: Vermutlich bist du Sehbehindert oder Blind ... nehme ich jetzt mal an ...
das schrieb Jürgen gleich zu Beginn. Wink

Gruß Uwe
Antworten Top
#12
... na ich sags doch ... mit vollem Anlauf rein in den Fettnapf ...  Blush

Aber die Herrschaften nehmen das meist cooler als wir Nicht-Behinderte ... ist oft auch besser.
VG Sabina

bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
Antworten Top
#13
Hi Sabina,

aber nicht doch - ich sag dazu nur "Ein blindes Huhn findet auch mal ein Korn"  :19:

Das ist jetzt nicht auf Dein erlebtes zurückzuführen sondern eher auf mich gemünzt.
So hat Dein Code:

"Range("A" & CStr(ListBox1.ListIndex + 1)) 'Der ListIndex ist 0-basiert."

mir sehr weitergeholfen. Ich mußte +1 nur dahin ändern in +7 so dass er in der 7. Zeile beginnt.
Jetzt kann jeder Eintrag der Listbox ausgewählt und in den Textfeldern bearbeitet werden und 
das zurück schreiben in die Tabelle / aktualisieren funktioniert auch schon bedingt.
Habe nach der Aktualisierung und neu anwählen in der Listbox noch ab und zu div. Laufzeitfehler,
die hängen jedoch mit dem "Format" zusammen.
Ist jetzt mühsames Stückwerk aber ich versuche sie nach und nach weg zu bekommen.

Also mein Korn habe ich dank Deiner Hilfe gefunden.

Wenn es weitere Probs gibt melde ich mich

LG

Jürgen

PS: Darfst Dir die Flügel (engel) anziehen!!
Antworten Top
#14

.xlsm   Test2.xlsm (Größe: 139,94 KB / Downloads: 9) So Liebe Forum Gemeinde,

nach dem ich mit Sabrina's Tipps und Hilfe ein enormes Stück weitergekommen bin hängt es jetzt mal wieder.

Nach 2 weiteren Tagen Code vorlesen lasen und arbeiten mit Strg C und Strg V und mit Spracheingabe abändern 
finde ich nichts mehr an Code Schnippseln woraus ich meinen Fehler finden könnte.

Im Anhang könnt Ihr den aktuellen Code herunterladen.

Beschreibung wobei ich Hilfe Brauche: 

Wenn die Excel Tabelle geöffnet wird, wird automatisch die Userform1 geöffnet.
Hier hat der Anwender die Möglichkeit in der Listbox einen Clienten auszuwählen.
Wählt er einen Clienten aus, werden alle in der Tabelle vorhandenen Daten in gesperrtenTextboxen angezeigt und die Commandbuttons 
"Client bearbeiten", "Client Stammdaten bearbeiten" aktiv.
Wählt man jetzt "Client bearbeiten" werden alle dafür vorgesehenen Textboxen aktiv, die Textboxen welche aus den Stammdaten
in der Tabelle Ihre Informationen beziehen oder Berechnungen ausführen bleiben gesperrt.

Ich habe bereits einen Code fertig für die Textbox17 und Textbox18. Hierkann der Anwender ein Datum im Format TT.MM.JJJJ
eingeben. Dieses Datum wird geprüft ob es dem Monat und dem Jahre entsprechend richtig ist. Ist es falsch geht eine MsgBox auf mit dem
Fehlerhinweis.
Ist es richtig dann geht es weiter in die nächste Textbox.

Mein Problem ist es, dass ich es nicht schaffe egal mit welchem Code, das im Falle der falschen Eingabe und nach schließen der MsgBox
der Cursor wieder in der Textbox mit der Falscheingabe steht und diese mit gesamten Inhalt markiert ist.

Bildlich gesprochen:

Dateien (auch Bilder) bitte im Forum hochladen!

Der Code für die Textbox17 sieht so aus: Für die Helfer die sich nicht alles herunterladen wollen

Code:
Private Sub TextBox17_Change()

End Sub
Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   Dim Text_Dat_A As String
   Dim Text_Dat_B As String
   Dim Text_Dat_C As String
   Dim Text_Dat_D As String
   Text_Dat_A = Format(TextBox15, "MM")
   Text_Dat_B = Format(TextBox17, "MM")
   Text_Dat_C = Format(TextBox15, "YYYY")
   Text_Dat_D = Format(TextBox17, "YYYY")
   If Text_Dat_B <> Text_Dat_A Or Text_Dat_D <> Text_Dat_C Then
       Dim Text1 As String
       Dim Text2 As String
       Dim Text3 As String
       Dim Text4 As String
       Dim Text5 As String
       Dim Text6 As String
       Text_Dat_A = Format(TextBox15, "MMMM")
       Beep
       Beep
       Text1 = "Fehler: !!!"
       Text2 = "Eingegebenes Datum darf nur innerhalb des"
       Text4 = "liegen!!! "
       Text5 = "      "
       Text6 = "              "
       MsgBox vbLf & Text2 & vbLf & vbLf & Text6 & Text_Dat_A & Text5 & Text_Dat_C & vbLf & vbLf & Text4, vbExclamation, "Meldung"
       Cancel = True
       TextBox17.SetFocus
       With TextBox17
           .SetFocus
           .SelStart = 1
           .SelLength = 8
       End With
   Else
       TextBox37.SetFocus
   End If
End Sub
Vielleicht kann einer der Spezialist /en /inen mir den Fehler sagen oder noch besser den Code so abändern das bei Falscher eingabe der Cursor wieder in der Textbox steht und
der Inhalt markiert ist.
Schon mal lieben Dank
Jürgen
PS: Sabrina, habe die Fettnäpfchen alle zur Seite geräumt  Thumbsupsmileyanim
Antworten Top
#15
Hallo Jürgen,

ich konnte leider deine Datei nicht testen (lag an einen fehlenden Verweis) aber normalerweise sollte es schon funktionieren denn du hast den Rückgabeparameter ja richtig gesetzt. Ziemlich umständlich deine Variablen Text1 bis Text6.

Code:
Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim Text_Dat_A As String
    Dim Text_Dat_B As String
    Dim Text_Dat_C As String
    Dim Text_Dat_D As String
    Text_Dat_A = Format(TextBox15, "MM")
    Text_Dat_B = Format(TextBox17, "MM")
    Text_Dat_C = Format(TextBox15, "YYYY")
    Text_Dat_D = Format(TextBox17, "YYYY")
    If Text_Dat_B <> Text_Dat_A Or Text_Dat_D <> Text_Dat_C Then
        Dim Text1 As String
        Dim Text2 As String
        Dim Text3 As String
        Dim Text4 As String
        Dim Text5 As String
        Dim Text6 As String
        Text_Dat_A = Format(TextBox15, "MMMM")
        Beep
        Beep
        Text1 = "Fehler: !!!"
        Text2 = "Eingegebenes Datum darf nur innerhalb des"
        Text4 = "liegen!!! "
        Text5 = "      "
        Text6 = "              "
        MsgBox vbLf & Text2 & vbLf & vbLf & Text6 & Text_Dat_A & Text5 & Text_Dat_C & vbLf & vbLf & Text4, vbExclamation, "Meldung"
        Cancel = True
    Else
        TextBox37.SetFocus
    End If
End Sub
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#16
Hallo Stefan,

danke Dir erst einmal, werde das morgen früh gleich testen und Dir bescheid geben.

Der Code wird schon noch abgespeckt aber erst wenn er läuft. Auch das mit den Text Variablen. Bin aber absoluter Anfänger
und baue erst mal mit Code Schnipseln.

Bimo Jürgen
Antworten Top
#17
Hallo Peter,

ich habe Deinen Code getestet. Er scheint das Setfocus sowie das Cancel = True durchzuführen, jedoch ist nach dem zurückgehen über dies weder der Cursor in der Textbox, noch ist das Feld markiert.

Hast Du eine Idee ??

Oder Jemand anderes

Blush

Gruß

Jürgen
Antworten Top
#18
(08.03.2019, 09:20)Merlin-1962 schrieb: Hallo Peter,

ich habe Deinen Code getestet. Er scheint das Setfocus sowie das Cancel = True durchzuführen, jedoch ist nach dem zurückgehen über dies weder der Cursor in der Textbox, noch ist das Feld markiert.

Hast Du eine Idee ??

Oder Jemand anderes

Blush

Gruß

Jürgen

Ups Sorry ich meinte Stefan

lg

Jürgen
Antworten Top
#19
Hallo Jürgen,

hat es einen bestimmten Grund, dass Du ShowModal = False brauchst? Denn genau deshalb funktioniert das Markieren der TextBox(en) nicht, sobald eine MsgBox ins Spiel kommt. Wenn ShowModal = True ist, funktioniert es so:

Code:
Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim Text_Dat_A As String
    Dim Text_Dat_B As String
    Dim Text_Dat_C As String
    Dim Text_Dat_D As String
    Text_Dat_A = Format(TextBox15, "MM")
    Text_Dat_B = Format(TextBox17, "MM")
    Text_Dat_C = Format(TextBox15, "YYYY")
    Text_Dat_D = Format(TextBox17, "YYYY")
    If Text_Dat_B <> Text_Dat_A Or Text_Dat_D <> Text_Dat_C And Me.Tag = "" Then
        Dim Text1 As String
        Dim Text2 As String
        Dim Text3 As String
        Dim Text4 As String
        Dim Text5 As String
        Dim Text6 As String
        Text_Dat_A = Format(TextBox15, "MMMM")
        Beep
        Beep
        Text1 = "Fehler: !!!"
        Text2 = "Eingegebenes Datum darf nur innerhalb des"
        Text4 = "liegen!!! "
        Text5 = "      "
        Text6 = "              "
        Cancel = True
        MsgBox vbLf & Text2 & vbLf & vbLf & Text6 & Text_Dat_A & Text5 & Text_Dat_C & vbLf & vbLf & Text4, vbExclamation, "Meldung"
        With TextBox17
            .SelStart = 0
            .SelLength = .TextLength
        End With
    Else
        TextBox37.SetFocus
    End If
End Sub

Da ist jetzt noch eine Abfrage drin, ob Me.Tag leer ist. Dadurch kann durch folgendes zusätzliches Ereignismakro eine eventuelle Meldung beim Schließen des Userforms vermieden werden:

Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Me.Tag = "Und weg"
End Sub

Gruß Uwe
Antworten Top
#20
(09.03.2019, 22:11)Kuwer schrieb: Hallo Jürgen,

hat es einen bestimmten Grund, dass Du ShowModal = False brauchst? Denn genau deshalb funktioniert das Markieren der TextBox(en) nicht, sobald eine MsgBox ins Spiel kommt. Wenn ShowModal = True ist, funktioniert es so:

Code:
Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   Dim Text_Dat_A As String
   Dim Text_Dat_B As String
   Dim Text_Dat_C As String
   Dim Text_Dat_D As String
   Text_Dat_A = Format(TextBox15, "MM")
   Text_Dat_B = Format(TextBox17, "MM")
   Text_Dat_C = Format(TextBox15, "YYYY")
   Text_Dat_D = Format(TextBox17, "YYYY")
   If Text_Dat_B <> Text_Dat_A Or Text_Dat_D <> Text_Dat_C And Me.Tag = "" Then
       Dim Text1 As String
       Dim Text2 As String
       Dim Text3 As String
       Dim Text4 As String
       Dim Text5 As String
       Dim Text6 As String
       Text_Dat_A = Format(TextBox15, "MMMM")
       Beep
       Beep
       Text1 = "Fehler: !!!"
       Text2 = "Eingegebenes Datum darf nur innerhalb des"
       Text4 = "liegen!!! "
       Text5 = "      "
       Text6 = "              "
       Cancel = True
       MsgBox vbLf & Text2 & vbLf & vbLf & Text6 & Text_Dat_A & Text5 & Text_Dat_C & vbLf & vbLf & Text4, vbExclamation, "Meldung"
       With TextBox17
           .SelStart = 0
           .SelLength = .TextLength
       End With
   Else
       TextBox37.SetFocus
   End If
End Sub

Da ist jetzt noch eine Abfrage drin, ob Me.Tag leer ist. Dadurch kann durch folgendes zusätzliches Ereignismakro eine eventuelle Meldung beim Schließen des Userforms vermieden werden:

Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 Me.Tag = "Und weg"
End Sub

Gruß Uwe

Hi Uwe,

danke für den Tipp, werde das mal so einbauen. Jedoch mehr als Sicherheit, falls die Schreibassistensßz doch irgend einen Weg findet die Userform zu schließen außer den vorgegebenen.
Ich habe das mit dem erscheinen der MSGBox beim Verlassen der Userform so gelöst dass -der Anwender überhaupt nicht an die Tabelle kommt. Beim Aufrufen des Worksheets sieht er nur ein leeres Blatt mit einem
Button "Clienten öffnen", zusätzlich wird die Userform direkt selbstständig geöffnet. Die Userform kann nicht mehr verlassen werden mit dem "X" oben rechts, da es nicht mehr vorhanden ist und auch in der
Funktion ausgeschaltet ist.
Es wurden drei CommandButton in der Userform eingebaut mit denen er Die Userform verlassen kann. 1Button = Verlassen mit Änderung in die Tabelle übernehmen und Tabelle sichern, 1Button = Verlassen ohne Übernahme der Änderungen und abschließend 1 Button beenden von Excel mit Änderung und Sicherung der Tabelle.

Mein Einziges Problem ist bis jetzt noch, dass wenn er in einer Textbox das Falsche Datum eingibt, die MsgBox sich öffnet und geschlossen wird, er zwar durch das Cancel= True
wieder in der Textbox landet, dort aber nichts markiert ist und auch kein Cursor zu sehen ist. Das heist nach seiner Fehleingabe und schließen der MsgBox muss er
die Textbox erst noch einmal mit der Maus anklicken so das ein Cursor erscheint.

Hast Du da auch einen Tip oder vielleicht jemand anderes?

Gruß Jürgen
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste