Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1800to1804
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
Zurück in TextBox
03.01.2021 20:32:51
Eberhard
Guten Abend
Schon wieder ein kleines Problem.
Ich habe eine UserForm in der sich zwei Listboxen und zwei Textboxen befinden. Wenn ich Januar anwähle dann muss der Cursor auf die Textbox1 springen. Nach der Eingabe & Enter drücken, erscheint die Textbox2. Cursor springt direkt in die TextBox2. Nach der Eingabe in Textbox2 & Enter sollten die Textboxen geleert werden & der Cursor wieder in die TextBox1 springen!
Dies funktioniert soweit bis zur Eingabe & Enter drücken der TextBox2. Danach springt mir der Cursor nicht wieder in die TextBox1 zurück! Habe schon vieles versucht. Kriege es einfach nicht hin!
Besten Dank für Eure Hilfe.
Gruss Daniel
https://www.herber.de/bbs/user/142730.xlsm

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zurück in TextBox
04.01.2021 09:30:10
Alwin
Hallo Daniel,
du musst nur TextBox1.SetFocus verwenden.
Private Sub ListBox2_Click()
Dim Box As Long
Dim Zellen As Long
ListBox1.ListIndex = -1
For Box = 0 To 11
If UFBGMQ.Controls("ListBox2").ListIndex = Box Then
Worksheets(Box + 1).Select
End If
Next Box
On Error Resume Next
Zellen = ActiveSheet.Range("S7:S44").SpecialCells(xlCellTypeBlanks).Cells(1).Row
If Zellen > 0 Then
Call RgNummer_Ein
Else
MsgBox "Alle Zeilen im " & ActiveSheet.Name & " sind belegt!", vbInformation
Unload Me
End If
TextBox1.SetFocus
End Sub
Gruß Uwe
Anzeige
AW: Zurück in TextBox
04.01.2021 09:44:08
Alwin
Hallo Daniel,
Sorry, ignriere was ich geschrieben hatte hilft so nicht.
Gruß Uwe
AW: Zurück in TextBox
04.01.2021 10:28:30
Eberhard
Hallo Uwe
Danke, dies habe ich schon oft und überall versucht. Auch Cancel = False & True eingesetzt. Aber habe es nicht hin bekommen! :-(
Wir geben noch nicht auf! :-)
Gruss Daniel
AW: Zurück in TextBox
04.01.2021 16:01:40
Mullit
Hallo,
probier mal, der erste Code sind Deine angepassten Exit-Events aus der Form, der zweite Code gehört in ein Standard-Modul:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    
    Dim Bereich As Range
    
    If NoEX Then Exit Sub           'Für das vorzeitige Abbrechen 
    
    If TextBox1 <> "" Then
        If Not IsNumeric(TextBox1.Text) And TextBox1 = "" Then
            MsgBox "Bitte eine Zahl mit 6 Ziffern eintragen!", vbInformation
            Cancel = True
            With TextBox1
                .Text = ""
                .SetFocus
            End With
        ElseIf Len(TextBox1.Text) <> 6 Then
                MsgBox "Bitte eine Zahl mit 6 Ziffern eintragen!", vbInformation
                Cancel = True
                With TextBox1
                    .Text = ""
                    .SetFocus
                End With
            Else
            Set Bereich = ActiveSheet.Range("S7:S44").Find(TextBox1, lookat:=xlWhole)
            If Bereich Is Nothing Then

                Set TextBox = TextBox2
                Call Application.OnTime(EarliestTime:=Now, Procedure:="SetFocus_TextBox")
                Call Preis_Ein

            Else
                MsgBox "Rechnungsnummer " & TextBox1 & " bereits vorhanden!", vbInformation
                TextBox1 = ""
            End If
        End If
    End If
End Sub


Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    
    Dim strPreis As String
    Dim lngZellen As Long
    
    If NoEX Then Exit Sub           'Für das vorzeitige Abbrechen 
    strPreis = TextBox2.Text

    If strPreis <> "" Then
        If Not IsNumeric(strPreis) Then
            MsgBox "Bitte einen Preis eintragen!", vbInformation
            Cancel = True
            With TextBox2
                .Text = ""
                .SetFocus
            End With
        Else
            strPreis = Format(strPreis, "#,##0.00")
            On Error Resume Next
            lngZellen = ActiveSheet.Range("S7:S44").SpecialCells(xlCellTypeBlanks).Cells(1).Row
            On Error GoTo 0
            If lngZellen > 0 Then
                TextBox2 = ""
                ActiveSheet.Cells(lngZellen, 19) = TextBox1.Value
                ActiveSheet.Cells(lngZellen, 20) = strPreis
                With TextBox1
                    .Text = ""
                    Set TextBox = TextBox1
                    Call Application.OnTime(EarliestTime:=Now, Procedure:="SetFocus_TextBox")
                End With
            Else
                MsgBox "Alle Zeilen voll!"
                Unload Me
            End If
        End If
    End If

End Sub

Option Explicit
Option Private Module

Private lobjTextBox As MSForms.TextBox

Public Sub SetFocus_TextBox()
If Not lobjTextBox Is Nothing Then
    Call lobjTextBox.SetFocus
    Set lobjTextBox = Nothing
End If
End Sub

Public Property Set TextBox(ByRef probjTextBox As MSForms.TextBox)
Set lobjTextBox = probjTextBox
End Property


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
AW: Zurück in TextBox
04.01.2021 20:14:42
Eberhard
Hallo Mullit
Vielen Dank für Deine Bemühungen. Funktioniert schon viel besser! Aber immer noch nicht ganz nach meinen Vorstellungen.
Beim ersten mal Klick auf Januar setzt er mir den Cursor nicht in die TextBox1! Wird bei der Rechnungsnummer eine vorhandene Nummer eingegeben, so erscheint die MsgBox. Nach ok drücken, fehlt der Cursor wieder in Textbox1 oder wechselt gerade in Textbox2!
Weis nicht ob dies irgendwie an der Version von Excel liegt? Ich habe zwei verschiedene PC's mit zwei verschieden Office. Funktioniert jedoch bei beiden Versionen nicht so richtig!
Gruss Daniel
Anzeige
AW: Zurück in TextBox
04.01.2021 21:34:36
Mullit
Hallo Daniel,
ok, ersetz mal die drei Events in Deiner Form und Deine beiden Prozeduren in Deinem Standardmodul:
Private Sub ListBox1_Click()
   
    Dim Zellen As Long
   
    ListBox2.ListIndex = -1
    
    If ListBox1.ListIndex = 0 Then
        Worksheets(3).Select
    ElseIf ListBox1.ListIndex = 1 Then
        Worksheets(6).Select
    ElseIf ListBox1.ListIndex = 2 Then
        Worksheets(9).Select
    ElseIf ListBox1.ListIndex = 3 Then
        Worksheets(12).Select
    End If
        
    Set TextBox = TextBox1
    Call Application.OnTime(EarliestTime:=Now, Procedure:="SetFocus_TextBox")
    Call RgNummer_Ein

End Sub

Private Sub ListBox2_Click()

    Dim Box As Long
    Dim Zellen As Long
  
    ListBox1.ListIndex = -1
    
    For Box = 0 To 11
        If UFBGMQ.Controls("ListBox2").ListIndex = Box Then
            Worksheets(Box + 1).Select
        End If
    Next Box
    
    On Error Resume Next
    Zellen = ActiveSheet.Range("S7:S44").SpecialCells(xlCellTypeBlanks).Cells(1).Row
    On Error GoTo 0
    If Zellen > 0 Then
        Set TextBox = TextBox1
        Call Application.OnTime(EarliestTime:=Now, Procedure:="SetFocus_TextBox")
        Call RgNummer_Ein
    Else
        MsgBox "Alle Zeilen im " & ActiveSheet.Name & " sind belegt!", vbInformation
        Unload Me
    End If
    
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    
    Dim Bereich As Range
    
    If NoEX Then Exit Sub           'Für das vorzeitige Abbrechen 
    
    If TextBox1 <> "" Then
        If Not IsNumeric(TextBox1.Text) And TextBox1 = "" Then
            MsgBox "Bitte eine Zahl mit 6 Ziffern eintragen!", vbInformation
            Cancel = True
            With TextBox1
                .Text = ""
                .SetFocus
            End With
        ElseIf Len(TextBox1.Text) <> 6 Then
                MsgBox "Bitte eine Zahl mit 6 Ziffern eintragen!", vbInformation
                Cancel = True
                With TextBox1
                    .Text = ""
                    .SetFocus
                End With
            Else
            Set Bereich = ActiveSheet.Range("S7:S44").Find(TextBox1, lookat:=xlWhole)
            If Bereich Is Nothing Then

                Set TextBox = TextBox2
                Call Application.OnTime(EarliestTime:=Now, Procedure:="SetFocus_TextBox")
                Call Preis_Ein

            Else
                MsgBox "Rechnungsnummer " & TextBox1 & " bereits vorhanden!", vbInformation
                TextBox1.Value = ""
                Set TextBox = TextBox1
                Call Application.OnTime(EarliestTime:=Now, Procedure:="SetFocus_TextBox")
            End If
        End If
    End If
End Sub

Sub RgNummer_Ein()
    With UFBGMQ
        .TextBox1.Visible = True
        .Label3.Visible = True
    End With
End Sub

Sub Preis_Ein()
    With UFBGMQ
        .TextBox2.Visible = True
        .Label4.Visible = True
    End With
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
AW: Zurück in TextBox
04.01.2021 22:04:27
Eberhard
Hallo Mullit
Du bist der Beste! Für meine Kenntnisse keine Ahnung was das alles soll, aber funktioniert wie gewünscht.
Melde mich wieder wenn ich ein Problem habe...
Besten Dank und einen schönen Abend.
Gruss Daniel
AW: Zurück in TextBox
04.01.2021 23:45:09
Mullit
Hallo Daniel,
na bitte, sag ich doch immer ;-), alles klar, geht sogar noch besser, ohne den ganzen Timer-Kram, ergänz bzw. ändere mal diese drei Sachen in Deiner UserForm, alles andere bleibt gleich....
Option Explicit

Private mblnExit As Boolean
Dim NoEX As Boolean             'Für das vorzeitige Abbrechen 

'..... 

Private Sub ListBox1_Enter()
If mblnExit Then
  mblnExit = False
  Call TextBox1.SetFocus
End If
End Sub

'...... 

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    Dim strPreis As String
    Dim lngZellen As Long

    If NoEX Then Exit Sub           'Für das vorzeitige Abbrechen 
    strPreis = TextBox2.Text
    Cancel = True

    If strPreis <> "" Then
        If Not IsNumeric(strPreis) Then
            MsgBox "Bitte einen Preis eintragen!", vbInformation
            Cancel = True
            With TextBox2
                .Text = ""
                .SetFocus
            End With
        Else
            strPreis = Format(strPreis, "#,##0.00")
            On Error Resume Next
            lngZellen = ActiveSheet.Range("S7:S44").SpecialCells(xlCellTypeBlanks).Cells(1).Row
            On Error GoTo 0
            If lngZellen > 0 Then
                TextBox2 = ""
                ActiveSheet.Cells(lngZellen, 19) = TextBox1.Value
                ActiveSheet.Cells(lngZellen, 20) = strPreis
                TextBox1.Text = ""
                Cancel = False

                mblnExit = True

            Else
                MsgBox "Alle Zeilen voll!"
                Unload Me
            End If
        End If
    End If

End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige