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
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.
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
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.
Danke trotzdem MzKlMu ;)
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
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! :)
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
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