Access-o-Mania

Office-Forum (Deutsch/German) => Microsoft Excel => Thema gestartet von: Pergus am Februar 08, 2012, 19:57:22

Titel: Wenn Textbox1 ist leer, dann springe in die Textbox5
Beitrag von: Pergus am Februar 08, 2012, 19:57:22
Hallo Excel-Freunde!

Ich bin auf der Suche nach einer Lösung zu folgendem Problem:

Eine UserForm (uf_EingabeRabatte) hat insgesamt 5 TextBoxen (tbSc1, tbSc2, tbSc3 tbSc4 und tbFaktor),
4 davon diesen zur Eingabe von Rabatten, eine alternativ zur Eingabe eines Umrechnungsfaktors.

Nun, der Benutzer (Kunde) soll die Möglichkeit bekommen seine, vom Lieferanten ihm gewährten Rabatte (eben bis zu 4 "Sconti") einzugeben oder,
wenn der Umrechnungsfaktor bekannt ist, diesen in der Textbox5 (tbFaktor) einzugeben.

Es kann immer nur eine Option gewählt werden:

Gibt der Benutzer (Kunde) in der 1. TextBox (tbSc1) einen Rabatt (als Zahl) ein, kann er zwar die ersten vier, nicht aber die 5.TextBox (tbFaktor) benutzen können.

Umgekehrt aber, verlässt der Benutzer (Kunde) die 1. TextBox (tbSc1) mit der TAB-Taste oder der Enter-Taste oder auch per Maus-Klick in die TextBox5 (tbFaktor),
so soll der Cursor auf diese 5.TextBox (tbFaktor) springen und dort den Focus erhalten. Entscheidet er sich um und verlässt wiederum diese TextBox,
soll der Cursor auf die TextBox1 (tbSc1) springen und dort den Focus erhalten.

Ich habe verschiedene Möglichkeiten schon versucht:

Private Sub UserForm_Initialize()
tbSc1 = ""
tbSc2 = ""
tbSc3 = ""
tbSc4 = ""
tbFaktor = ""

Private Sub tbSc1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Me.tbSc1 = "" Then Me.tbFaktor.SetFocus
End Sub

Private Sub tbFaktor_Enter()
MsgBox "Hallo"
UserForm1.tbFaktor.SetFocus
End Sub


Oder auch folgendes:

Private Sub UserForm_Initialize()
tbSc1 = ""
tbSc2 = ""
tbSc3 = ""
tbSc4 = ""
tbFaktor = ""
End Sub

Private Sub tbSc1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call Makro1
End Sub


...und dann in einem Modul (Modul1):

Sub Makro1()
If Len(uf_EingabeRabatte.tbSc1) = 0 Then uf_EingabeRabatte.tbFaktor.SetFocus
End Sub


Ich weiß einfach nicht wieso, aber der Cursor springt immer nur auf die 3.Textbox (tbSc3) anstatt in die 5.TextBox(tbScFaktor).

Weiß wer Rat?  ???

Ich bedanke mich schon mal im Voraus für die Hilfe!

Ein Gruß aus Bozen, Südtirol

Gustav
Titel: Re: Wenn Textbox1 ist leer, dann springe in die Textbox5
Beitrag von: MzKlMu am Februar 08, 2012, 20:07:56
Hallo,
hier würde ich eher mal über das Datenmodell nachdenken. Ich würde also für diese Rabatte eine extra Tabelle anlegen mit einem Bezug zum Kunden und zum Lieferanten, jeder Rabatt gibt einen Datensatz und kein Feld.  Auch die Rabatte sind ja genau genommen ein Faktor. Mit einem Ja/Nein Feld kannst Du bestimmen, ob die eingegebene Zahl ein Faktor ist, oder ein Rabatt (wenn Du das unterscheiden willst).
Wenn es 5 Rabatte/Faktoren gibt, sind es 5 Datensätze, wenn nur 1 Rabatt dann nur einer.
Titel: Re: Wenn Textbox1 ist leer, dann springe in die Textbox5
Beitrag von: Pergus am Februar 08, 2012, 20:22:03
Danke für die schnelle Antwort MzKlMu,

das genannte Problem ist nur ein Teil einer enormen Arbeitsmappe mit über 30 Tabellen und einer Größe von über 17 Mb.
Die Rabatte werden natürlich während der Eingabe des Benutzers in ein Faktor umgerechnet, der dann in eine benannte Zelle (Faktor) geschrieben wird.
Diese Variable dient dann für weitere Berechnungen.

Kunden und deren Konditionen dürfen nicht als Tabelle aufscheinen, da diese Arbeitsmappe (komprimiert) an die verschiedenen Kunden geschickt wird (Privacy).
Der Lieferant ist nur einer, dessen Konditionen zwar der Großhändler, nicht aber die Kunden wissen sollen.
Der Kunde gibt seine 4 möglichen Rabatte des Großhändlers ein.

Bitte lasst mich wissen, wenn ich meine Problematik undeutlich erkläre!

Danke inzwischen an Alle, die sich mit meinem Problem befassen wollen!

Gustav
Titel: Re: Wenn Textbox1 ist leer, dann springe in die Textbox5
Beitrag von: MzKlMu am Februar 08, 2012, 20:34:50
Hallo,
sorry, vergiss meine Antwort, ich dachte, das wäre Access, aber es geht ja um Excel, habe ich übersehen. Da muss ich dann passen.
Titel: Re: Wenn Textbox1 ist leer, dann springe in die Textbox5
Beitrag von: Pergus am Februar 08, 2012, 20:55:01
Danke trotzdem MzKlMu  ;)
Titel: Re: Wenn Textbox1 ist leer, dann springe in die Textbox5
Beitrag von: daolix am Februar 08, 2012, 20:55:44
Hallo, versuch es mal so:

Private SubtbSc1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    Select Case KeyCode
        Case 9, 13
            Me.Controls("tbFaktor").SetFocus
            KeyCode = 0
        Case Else
       
    End Select
End Sub

Titel: Re: Wenn Textbox1 ist leer, dann springe in die Textbox5
Beitrag von: Pergus am Februar 08, 2012, 22:03:17
Hallo daolix, das war's fast schon.

zwar springt der Cursor in die TextBox "tbFaktor" und auch wieder zurück, was ja insofern richtig ist (wenn die TextBoxen leer sind),
doch leider auch dann, wenn der Benutzer Daten in die TextBox "tbSc1" eingegeben hat.
Dann sollte die Möglichkeit bestehen, sequenziell (also in der Reihenfolge) die Textboxen "tbSc2", "tbSc3" und "tbSc4" anzuspringen, nicht aber die "tbFaktor".

Der Sinn ist, dass der Benutzer entweder in die TextBoxen tbSc1, ...2, ...3 und ...4
numerische Zahlen mit bis zu 2 Kommastellen (als Rabatt) eingeben kann

oder

den Umrechnungsfaktor  mit bis zu 3 Kommastellen in die TextBox "tbFaktor" eintippt,
dann aber nicht in die anderen TextBoxen schreiben kann,
wie gesagt, vorausgesetzt, die TextBox "tbFaktor" ist nicht leer.

Danke auf jeden Fall für Deinen Beitrag zur Lösung,
ich weiß Du bist auf dem richtigen Weg, auch wenn ich die Code noch nicht ganz gecheckt habe!  :)
Titel: Re: Wenn Textbox1 ist leer, dann springe in die Textbox5
Beitrag von: daolix am Februar 08, 2012, 23:58:55
Hab zwar nix verstanden aber evtl dann so:

Private Sub tbFaktor_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
        Case 9, 13
            If Val(Me.tbFaktor) = 0 Then
                Me.Controls("tbSc" & Format$(1)).Enabled = True
                Me.Controls("tbSc" & Format$(1)).SetFocus
                Me.tbFaktor.Enabled = False
            End If
    End Select
End Sub

Private Sub tbSc1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim i As Long
    Select Case KeyCode
        Case 9, 13
            If Val(Me.tbSc1) > 0 Then
                For i = 1 To 4
                    Me.Controls("tbSc" & Format$(i)).Enabled = True
                Next
                Me.Controls("tbSc2").SetFocus
            Else
                Me.Controls("tbFaktor").Enabled = True
                Me.Controls("tbFaktor").SetFocus
                Me.Controls("tbSc" & Format$(1)).Enabled = False
            End If
            KeyCode = 0
        Case Else
       
    End Select
End Sub

Private Sub UserForm_Initialize()
    Dim i As Long
    For i = 2 To 4
        Me.Controls("tbSc" & Format$(i)).Value = ""
        Me.Controls("tbSc" & Format$(i)).Enabled = False
    Next
    Me.tbFaktor = ""
    Me.tbFaktor.Enabled = False
End Sub
Titel: Re: Wenn Textbox1 ist leer, dann springe in die Textbox5
Beitrag von: Pergus am Februar 09, 2012, 20:00:48
Hallo daolix,

sehe schon die Zieleinfahrt, Deine Code funktioniert wunderbar.
Werde nur noch ein Paar kleine Anpassungen vornehmen und ich glaube das war's!

Ich danke Dir!!!  ;)

Gruß Gustav