[Excel][VBA] Steuerelemente auf userforms

02/06/2010 - 07:33 von Volker Neurath | Report spam
Hallo zusammen,

wie schon mehrfach erwàhnt, bin ich Anfàgner bezüglich der kombination
Excel & VBA - was nicht heisst, dass ich kompletter VBA-Anfànger wàre:
ich komme von Access.

Und genau deswegen bin ich verwundert:
kann es sein, dass nahezu alle Steuerelemente auf Userforms völlig
anders funktionieren, als die Formular-Steuerelemente in Access?

Z.B. habe ich keine Möglichkeit gefunden Excel mitzuteilen, dass z.B. in
einer Textbox ausschliesslich Zahlen oder Datumswerte eingegeben werden
dürfen.
Ebenso fehlen mir viele gewohnte Ereignisse - z.B. "Exit" (Beim
Verlassen) oder "LostFocus" (Bei Fokusverlust).

Wie mache ich denn nun:

- eine Gültigkeitsprüfung der im Userform erfassten Daten
- eine prüfung, ob alle Mussfelder gefüllt sind, und zwar möglichst
schon beim Verlassen des jeweiligen Muss-Feldes?

Ich verwende hier Excel 2003.

Volker


Wenn es vom Himmel Zitronen regnet -- lerne, Limonade zu machen.
 

Lesen sie die antworten

#1 Andreas Killer
02/06/2010 - 09:15 | Warnen spam
On 2 Jun., 07:33, Volker Neurath
group.org> wrote:

wie schon mehrfach erwàhnt, bin ich Anfàgner bezüglich der kombination
Excel & VBA - was nicht heisst, dass ich kompletter VBA-Anfànger wàre:
ich komme von Access.


Das ist doch schon mal gut zu wissen. :-)

Und genau deswegen bin ich verwundert:
kann es sein, dass nahezu alle Steuerelemente auf Userforms völlig
anders funktionieren, als die Formular-Steuerelemente in Access?


Ja, die Office-Produkte unterscheiden sich in diversen Punkten in der
Funktionalitàt.

Z.B. habe ich keine Möglichkeit gefunden Excel mitzuteilen, dass z.B. in
einer Textbox ausschliesslich Zahlen oder Datumswerte eingegeben werden
dürfen.


Ist richtig, das geht nicht, muss man programmieren.

Ebenso fehlen mir viele gewohnte Ereignisse - z.B. "Exit" (Beim
Verlassen) oder "LostFocus" (Bei Fokusverlust).


Mach mal eine neue Mappe, füge eine Userform ein und auf diese eine
Textbox. Nun geh in den Code-Editor der Userform und wàhle links oben
über dem Codefenster in dem Dropdown die TextBox1 aus. Nun hast Du im
rechten Dropdown dazu alle Ereignisse die es gibt.

- eine Gültigkeitsprüfung der im Userform erfassten Daten


Am besten Du prüfst schon wàhrend der Eingabe auf die gültigen
Zeichen. Ich hab mir da Universalroutinen gebastelt die ich dann
jeweils in den Ereignissen einfach aufrufe. Ich hàng den Code mal
unten dran.

- eine prüfung, ob alle Mussfelder gefüllt sind, und zwar möglichst
schon beim Verlassen des jeweiligen Muss-Feldes?



Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Trim$(TextBox1.Text) = "" Then
'Darf nicht leer sein
Beep
Cancel = True
End If
End Sub

Interessant ist auch ggf. das Change-Ereignis welches bei jeder
Änderung (Tastendruck) aufgerufen wird.

Andreas.

Private Sub TB_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Làßt nur Zahlen in der Textbox zu
Select Case KeyAscii
Case Asc(Application.International(xlThousandsSeparator))
'Erlaube Tausender Trennzeichen/àndere zu Dezimaltrenner
KeyAscii = Asc(Application.International(xlDecimalSeparator))
Case Asc("0") To Asc("9")
'Erlaube Ganzzahlen
Case Asc("-")
'Erlaube Negative Werte/Berechnungen
Case Asc(Application.International(xlDecimalSeparator)), _
Asc("E"), Asc("e")
'Erlaube Dezimalzahlen
Case Asc("+"), Asc("*"), Asc("/"), Asc("^")
'Erlaube Berechnungen
Case Else
'Nicht erlaubt
KeyAscii = 0
End Select
End Sub

Private Sub Textbox1_KeyPress( _
ByVal KeyAscii As MSForms.ReturnInteger)
TB_KeyPress KeyAscii
End Sub

Private Sub TB_BeforeUpdate(TB As Control, _
ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo CancelIt
'Berechne den Wert oder Formeln
TB = Evaluate(Replace(TB.Text, _
Application.International(xlDecimalSeparator), "."))
Exit Sub
CancelIt:
Beep
Cancel = True
End Sub

Private Sub Textbox1_BeforeUpdate( _
ByVal Cancel As MSForms.ReturnBoolean)
TB_BeforeUpdate Me.ActiveControl, Cancel
End Sub

Ähnliche fragen