Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1740to1744
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

TextBox_AfterUpdate

TextBox_AfterUpdate
26.02.2020 12:15:11
Mike
Hallo zusammen,
ich benutze eine Eingabemaske mit Textboxen, mit denen Zahlenwerte eingegeben werden, und anschließend Berechnungen durchgeführt werden (Zahlen werden u.a. addiert und in einem Anzeigefenster dargestellt).
Hierfür benutze ich die Funktion TextBox_AfterUpdate. Die Userform/Elemente sind so eingestellt, das man mit der Enter-Taste zwischen 2 Eingabefenstern wechseln kann, und bei Eingabe einer Zahl diese verarbeitet wird.
Bis jetzt läuft das ganze unter WIN XP (SP2) und Excel 2003 ohne Probleme.
Nun wurden neue Rechner angeschaft mit WIN10 und Excel 365, und es funktioniert nicht richtig.
Das Problem: an den alten Rechnern nimmt "AfterUpdate" jede Eingabe an und verarbeitet sie, bei den neuen Rechnern reagiert "AfterUpdate" nur, wenn eine andere Eingabe kommt!
Wenn ich jetzt "1" eingebe, und beim nächsten mal wieder 1 eingebe passiert nichts, bei einer geänderten Eingabe funktioniert es wie gewohnt.
Hab das ganze auf vier Konfigurationen getestet (Programm kopiert und auch Programmausschnitt in den jeweiligen Versionen neu erstellt.)
Mit XP/Excel2003 und WIN10/Excel2016 funktioniertes, bei WIN10/Excel 365 und WIN7/Excel 2016 funktioniert es nicht! AfterUpdate ist doch eine Standardfunktion
Hat einer eine Idee, woran das liegen könnte? Gibts eventuell Einstellungen bei WIN oder Excel die man ändern müsste?
Für Antworten und Ideen wäre ich wirklich dankbar!
MFG Mike

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: TextBox_AfterUpdate
27.02.2020 08:04:05
Luschi
Hallo Mike,
es ist ein Jammer, daß solche Standard-Routinen von Excel-Version zu Excel-Version in Verbindung mit dem entsprechenden Betriebsystem unterschiedlich (re)agieren. Deshalb benutze das Ereignis 'AfterUpdate' nur bei Kombo- & List- aber nicht bei TextBoxen. In WinWord ist es noch schlimmer, da reagieren die Steuerelemente erst beim Verlasssen des Steuerelements.
Deshalb benutze ich dieses Ereignis/Event:

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

'KeyCode' gibt den ASCII-Code der jeweils gedrückten Taste zurück.
- 9 für Tab-Taste
- 13 für Enter-Taste
Bei der Standard-Einstellung wird die entsprechende TextBox verlassen. Hier kann man aber auch ungültige Tastenanschläge unterdrücken, indem man 'KeyCode' auf 0 setzt und der User nicht jeden Unsinn eingeben darf.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: TextBox_AfterUpdate
27.02.2020 08:54:30
Mike
Hallo Luschi,
vielen Dank für deine Antwort.
Habs gleich mal probiert, und deinen Code so eingegeben.
Wenn in die Textbox gesprungen wird, erfolgt bei jedem Tastendruck ein 'Laufzeitfehler 13'
Ich möchte ja eine beliebige Zahl eingeben, und dann mit Enter die TextBox verlassen und die Berechnung starten.
Muss ich da den KeyCode auf 13 setzen, wenn ja wo und wie mache ich das?
Sorry, bin da leider (noch) nicht so fit!
LG Mike
AW: TextBox_AfterUpdate
28.02.2020 09:56:55
Matthias
Moin!
Da sich keiner mehr gemeldt hat, würde ichmal antworten.
Den Vorschalg von Luschi kannst du so einbauen:
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case 48 To 57
'dsa sind zahlen da nix
Case 13
'ènter taste, da der Code bzw. aufruf vom wechsel rein
Case Else
'alle anderen zeichen
KeyCode = 0
End Select
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case 48 To 57
'dsa sind zahlen da nix
Case 13
'ènter taste, da der Code bzw. aufruf vom wechsel rein
Case Else
'alle anderen zeichen
KeyCode = 0
End Select
End Sub

Bei Zahlen (der Tastenkode 48 bis 57) passiert nix, die werten eingetagen. Bei Enter kannst du deine Berechnungen starten. Danach passiert das, was du bei den Boxen eingestellt hast - also er springt in die andere Box.
Bei allen andern Anschlägen wird der Keycode auf 0 gesetzt. Damit passiert nix. einfach mal testen.
Hier noch ein anderer Vorschlag. Der arbeite mit dem Exit Event. Der prüft, ob der Wert numerisch ist und wechselt dann erst bzw. startet deine Berechnung.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(Me.TextBox1) Then
'hier das was gemcht weden soll
MsgBox "ich mach was"
Else
Cancel = True
End If
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(Me.TextBox2) Then
'hier das was gemcht weden soll
MsgBox "ich mach was"
Else
Cancel = True
End If
End Sub
VG
Anzeige
AW: TextBox_AfterUpdate
02.03.2020 20:35:26
Mike
Hallo Matthias,
vielen Dank für den Beispielcode, hab schon wieder einiges gelernt.
Die Abfrage der Tasten und Eingabebechränkung auf Zahlen funktioniert super.
Das Problem mit "nur rechnen, wenn eine Eingabe erfolgt ist" hab ich jetzt über die Exit-Bedingung gelöst, und vor dem Sprung in die nächste Textbox setzte ich diese immer auf"Null"!
So passiert beim direkten Verlassen mit Enter nichts, nur wenn vorher wirklich eine Eingabe erfolgt ist.
Vielen Dank euch!
VG Mike

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige