Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  CATIA V5 Programmierung
  Userinput validieren: natürliche Zahl?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min 48
  
KISTERS 3DViewStation: Schutz sensibler 3D CAD Daten, egal von wo Sie arbeiten, eine Pressemitteilung
Autor Thema:  Userinput validieren: natürliche Zahl? (1638 mal gelesen)
Starbirth
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Starbirth an!   Senden Sie eine Private Message an Starbirth  Schreiben Sie einen Gästebucheintrag für Starbirth

Beiträge: 119
Registriert: 22.10.2009

erstellt am: 11. Nov. 2010 09:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Forum,
habe hier ein kleies Problemchen.
Ich würde gerne den Input für mein Makro (CATVBA), vor der weiteren Arbeit damit, auf seine Eignung testen und dem User gegebenen Falles eine Fehlermeldung ausgeben, wen was nicht passt.

Der Input selber kommt über eine Textbox in einer kleinen GUI rein.
Erwartet wird lediglich eine natürliche Zahl zwischen 2 und 999.

Nun gibt es zwar die VB Funktion "IsNumeric" mit der ich schon mal testen kann ob der Input überhaupt eine Zahl ist. Leider gibt die Funktion auch für nicht natürliche Zahlen ein True aus. Wie prüfe ich das im Nachgang am besten?

Ein Gedanke den ich hatte war zu testen ob die eingegebene Zahl = n*1 ist. Aber der Code dafür wäre IMHOIn my humble oppinion (Meiner Meinung nach) etwas zu umfangreich für solch eine Lapalie. Das muss doch einfacher gehen.
Hat jemand einen Tipp für mich?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

matzehahn
Mitglied
Student


Sehen Sie sich das Profil von matzehahn an!   Senden Sie eine Private Message an matzehahn  Schreiben Sie einen Gästebucheintrag für matzehahn

Beiträge: 19
Registriert: 11.08.2010

CATIAV5 R19 SP03

erstellt am: 11. Nov. 2010 11:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Starbirth 10 Unities + Antwort hilfreich

Gib doch vorher schon nur die Möglichkeit vor Zahlen einzugeben.

Code:

Sub Textbox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Dim Zugelassen As String

Zugelassen = "0123456789"

If InStr(1, Zugelassen, Chr$(KeyAscii)) = 0 Then
    KeyAscii = 0
End If

End Sub


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Starbirth
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Starbirth an!   Senden Sie eine Private Message an Starbirth  Schreiben Sie einen Gästebucheintrag für Starbirth

Beiträge: 119
Registriert: 22.10.2009

erstellt am: 11. Nov. 2010 12:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke, das klingt sehr gut.
Nur ist mir noch unklar wie ich das jetzt so in meinen Code implementieren soll dass es auch funktioniert.
Die entsprechende Textbox wird beim öffnen des Forms mit 100 (als Standardwert) initialisiert.
Der von dir gepostet Sub müsste ja dann angesprungen werden, wenn der User die Textbox anklickt und den Wert ändern möchte. Oder sehe ich das falsch?

Wie steuert man sowas?


Ein wenig später getippt:

Habe es jetzt nach ein wenig Googeln so zusammengebaut:

Code:
Private Sub BOX_Schnittanzahl_KeyDown(ByVal KeyAscii As MSForms.ReturnInteger)
'BOX_Schnittanzahl ist meine Textbox für die Usereingabe

Dim Zugelassen As String
Zugelassen = "0123456789"

If InStr(1, Zugelassen, Chr$(KeyAscii)) = 0 Then
    KeyAscii = 0
End If

End Sub



Das ganze Gebilde läuft direkt in der ersten Zeile (Private Sub...) auf einen Compile Error (procedure declaration does not match description of event or procedure having the same name).
Schlau werde ich aus dem Fehler nicht. Was macht man da?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RSchulz
Ehrenmitglied V.I.P. h.c.
Head of CAD, Content & Collaboration / IT-Manager



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 11. Nov. 2010 12:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Starbirth 10 Unities + Antwort hilfreich

Hallo versuch es mal mit...

Code:

Sub CATMain()

   Dim bspZahl as Double
  
   if isNumeric(txtFeld1.text) then
      if isInteger(txtFeld1.text) = true then
         bspZahl = txtfeld1.text
      else
         msgbox("Sie müssen eine Zahl von 2-999 eingeben!")
         exit sub
      end if
   else
      msgbox("Sie müssen eine Zahl von 2-999 eingeben!")
      exit sub
   end if

end Sub

Public Function IsInteger (tmpNumber as Double) as Boolean
  IsInteger = (Int(tmpNumber) = tmpNumber)
End Function


Habe ich schnell von Hand getippt und nicht geprüft. Sollte aber funktionieren!

Ergänzung: txtFeld1 ist das Feld, in das die Zahl eingegeben wird. Ich habe im Beispiel CATMain verwendet. Der Code gehört natürlich in die wie ich annehme Clickoperation.

------------------
MFG
Rick Schulz
          Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

[Diese Nachricht wurde von RSchulz am 11. Nov. 2010 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Starbirth
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Starbirth an!   Senden Sie eine Private Message an Starbirth  Schreiben Sie einen Gästebucheintrag für Starbirth

Beiträge: 119
Registriert: 22.10.2009

erstellt am: 11. Nov. 2010 14:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Besten Dank Rick,
habe es jetzt nach deiner Version gemacht. Leicht angepasst macht die genau das, was ich wollte.
Sehe ich richtig, dass die eigentlich nur prüfst ob die eingegebene Zahl gleich der eingegebenen Zahl ohne Nachkommastellen ist? Schöner Trick, kurz und krisensicher.

Musste lediglich noch ein wenig mit den Variablen und Typen spielen, um IsNumeric den erwarteten String und IsInteger den gewollten Double zukommen zu lassen.

Für alle die auch irgendwann mal vor dem Problem stehen, hier noch mein Code:

Code:
Private Sub BTN_Makrostart_Click()

    'Check Input in Box Schnittezahl. Wenn keine gültige Zahl, Fehler melden und auf Besserung hoffen
    Dim Testzahl As String
    Dim TestzahlDBL As Double
   
    Testzahl = BOX_Schnittanzahl.Text
   
    If IsNumeric(Testzahl) Then     'Check ob String in Eingabefeld numerisch ist
            TestzahlDBL = CDbl(BOX_Schnittanzahl.Text)      'Umwandlung von String zu Double
            If isInteger(TestzahlDBL) = True Then       'Check ob natürliche Zahl und im Zahlenbereich, siehe unten
               Schnittzahl = TestzahlDBL       '<------- validierte Zahl, damit gehts weiter
        Else
            MsgBox ("Bitte geben Sie eine natürliche Zahl von 2-999 eingeben.")
            Exit Sub
        End If
    Else
        MsgBox ("Geben Sie die Zahl bitte in Ziffern ein. Buchtaben kann ich nicht lesen.")
        Exit Sub
    End If
End Sub



Code:
Function isInteger(tmpNumber As Double) 'as Boolean

  isInteger = (Int(tmpNumber) = tmpNumber)      'Vergleicht tmpNumber mit tmpNumber ohne Nachkommastellen. Wenn gleich -> natürliche Zahl -> isInteger=True
 
  If tmpNumber < 2 Or tmpNumber > 999 Then      'Gültiger Wertebereich für tmpNumber wird hier gesetzt
     isInteger = False
  End If
End Function


[Diese Nachricht wurde von Starbirth am 11. Nov. 2010 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

matzehahn
Mitglied
Student


Sehen Sie sich das Profil von matzehahn an!   Senden Sie eine Private Message an matzehahn  Schreiben Sie einen Gästebucheintrag für matzehahn

Beiträge: 19
Registriert: 11.08.2010

CATIAV5 R19 SP03

erstellt am: 11. Nov. 2010 14:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Starbirth 10 Unities + Antwort hilfreich

Mein Code kommt in die UserForm und wird bei einem KeyPress in die Textbox ausgeführt.

Er blockt quasi schon eine falsche Eingabe.

Man kann das natürlich noch erweitern mit If Abfragen damit nicht mehr als 3 Stellen eingegebn werden kann etc.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz