| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Nur Zahleneingabe in Textbox (1694 mal gelesen)
|
schmodi Mitglied Metallbaukonstrukteur

 Beiträge: 57 Registriert: 20.05.2007 Autodesk Architecural Desktop 2007 Windows XP Professional Version 2002 SP2 Pentium 1.7 MHZ, 1 GB Ram
|
erstellt am: 06. Feb. 2008 21:36 <-- editieren / zitieren --> Unities abgeben:         
Hallo Ich habe ein problem, wie kann ich in einer Textbox beschränken das nur Zahlen eingegeben werden können. Ich habe gegoogelt und habe dies gefunden aber leider funktioniert es nicht. Private Sub Text1_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 48 To 57 Case Else KeyAscii = 0 End Select End Sub Es heisst immer "Dekleration der Prozedur entspricht nicht Beschreibeung eines Ereignisses oder einer Prozedur mit demselben Namen" Ich hoffe ihr könnt mir weiterhelfen wie ich das Problem lösen kann. Gruss Schmodi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 06. Feb. 2008 21:47 <-- editieren / zitieren --> Unities abgeben:          Nur für schmodi
Hi Schmodi, Das hast du was falsch kopiert. Es muss so lauten:
Code: Private Sub Text1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Select Case KeyAscii Case 48 To 57 Case Else KeyAscii = 0 End Select End Sub
Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
schmodi Mitglied Metallbaukonstrukteur

 Beiträge: 57 Registriert: 20.05.2007 Autodesk Architecural Desktop 2007 Windows XP Professional Version 2002 SP2 Pentium 1.7 MHZ, 1 GB Ram
|
erstellt am: 07. Feb. 2008 20:46 <-- editieren / zitieren --> Unities abgeben:         
Hallo Vielendank Carsten. Es funktioniert wunderbar. Habe aber noch eine weitere frage. Ich habe jetzt ganz viele Textbox in meinem Userform. Muss ich für jede Textbox diesen Code eingeben oder gibt es eine möglichkeit alle miteinander anzusprechen. Gruss Schmodi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 08. Feb. 2008 06:59 <-- editieren / zitieren --> Unities abgeben:          Nur für schmodi
|
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 08. Feb. 2008 10:09 <-- editieren / zitieren --> Unities abgeben:          Nur für schmodi
Hallo Schmodi, im VBA wird dir nichts anderes übrig bleiben als den Code in eine Funktion zu packen und diese an den KeyPress Event einer jeden Textbox zu hängen. Im Gegensatz zu VB werden unter VBA keine Steuerelementfelder unterstützt. Im VB.net kannst du einen gemeinsamen Eventhandler für diverse auch unterschiedliche Steuerelemente bündeln. Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
 
 Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 10. Feb. 2008 11:31 <-- editieren / zitieren --> Unities abgeben:          Nur für schmodi
Hallo Schmodi, dazu legst du dir einfach eine Klasse der Textboxen an. Beispiel In Klassenmodul des Userforms: Code: Option ExplicitPrivate objTextBox() As clsTextBox Private Sub UserForm_Activate() Dim objControl As Control Dim intIndex As Integer 'durchlaufe alle Steuerelemente des Userforms For Each objControl In Controls 'wenn das Steuerelement eine Textbox ist If TypeOf objControl Is MSForms.TextBox Then 'Zähler für Textboxen eins hoch setzen intIndex = intIndex + 1 'Array um einen Eintrag erweitern ohne die vorhergehenden zu löschen ReDim Preserve objTextBox(1 To intIndex) 'eine neue Klasse im Array anlegen Set objTextBox(intIndex) = New clsTextBox 'der Objekteigenschaft der Klasse das Objekt übergeben Set objTextBox(intIndex).prpTextBox = objControl End If Next End Sub Private Sub UserForm_Terminate() Dim intIndex As Integer For intIndex = 1 To UBound(objTextBox) 'Klasse zerstören Set objTextBox(intIndex) = Nothing Next 'Array löschen Erase objTextBox End Sub
Füge ein Klassenmodul ein und benenne es "clsTextBox" Da kommt folgender Code rein: Code: Option ExplicitPrivate WithEvents mobjTextBox As MSForms.TextBox Friend Property Set prpTextBox(objTextBox As MSForms.TextBox) 'übergebenes Objekt an die Klasse verweisen Set mobjTextBox = objTextBox End Property Private Sub mobjTextBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'Asciicode der gedrückten Taste auswerten If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End Sub
Das ist natürlich nur ein Beispiel, denn es werden ausnahmslos alle Textboxen des Userforms an die Klasse verwiesen. Eine Abfrage mit If - Then ist in dem Fall wesentlich schneller als Select - Case. Das macht nur Sinn, wenn du bei verschiedenen Werten verschiedene Aktonen ausführst oder verschiedene Werte zurück gibst. ------------------ Gruß Nepumuk  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |