Office: in Formular TextBox auf Inhalt prüfen

Helfe beim Thema in Formular TextBox auf Inhalt prüfen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen In meinem Formular sollten in den Textboxen8- TextBoxen 88 nur Zahlen stehen. Denn wenn das Formular erst mal ausgefüllt ist, kann der... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von santo, 8. Oktober 2008.

  1. in Formular TextBox auf Inhalt prüfen


    Hallo zusammen

    In meinem Formular sollten in den Textboxen8- TextBoxen 88 nur Zahlen stehen.
    Denn wenn das Formular erst mal ausgefüllt ist, kann der User mittels eines CommandButton eine Berechnung starten. Sind aber bspw. Buchstaben erfasst, bricht das VBA-Skript logischer weise ab.
    Deshalb würde ich gerne deren Inhalt prüfen und falls ein nicht nummerischer wert vorhanden ist mittels MsgBox daraufhinweisen, dass nur Zahlen erlaubt sind. Bspw. so:

    Private Sub TextBox8_Change()
    If Not IsNumeric(TextBox8.Value) Then
    MsgBox ("Gültige Zahl eingeben!")
    Exit Sub
    End If

    Bei 88 zu überprüfenden TextBoxen ist meine Methode aber zu umständlich.
    Geht es auch einfacher? (Evtl. mittels Klassen? (da kenne ich mich leider nicht aus).

    lg
    Santo

    :)
     
  2. Ich bin eigentlich nah dran, nur durchläuft meine methode dann alle Textboxen und prüft diese, auch jene ohne Inhalt und auch jene, welche Text enthalten dürfen. Seht euch mal das Coding "Inhalt_prüfen" an. Es wird aufgeruft, sobald eine änderung "change" statt findet. Wenn dieses Coding noch sinnvoll ergänzt würde (z.B. dort wo ich mit rot schreibe), hätten wir wohl die Lösung.

    Klasse:
    Private Sub g_objTextBox_Change()
    UserForm1.Inhalt_prüfen
    End Sub

    Private Sub Init_TextBoxes()
    Dim objctl As Control
    Dim nCnt As Integer
    'UserForm1.TextBox2.Value = 2
    For Each objctl In Me.Frame1.Controls
    If TypeOf objctl Is MSForms.TextBox Then
    nCnt = nCnt + 1
    ReDim Preserve m_objTextBoxes(1 To nCnt)
    Set m_objTextBoxes(nCnt).g_objTextBox = objctl
    End If
    Next objctl
    End Sub

    Sub Inhalt_prüfen()
    Dim objctl As Control
    For Each objctl In Me.Frame1.Controls
    If TypeOf objctl Is MSForms.TextBox Then
    If 'wenn das objekt, jenes objekt ist, welches geändert wird dann....
    If Not IsNumeric(objctl.Value) Then
    MsgBox ("Gültige Zahl eingeben!")
    Exit Sub
    Exit For
    ' Else
    ' Next objctl 'Exit For
    End If
    Else
    ' Next objctl
    End If
    End If
    Next objctl
    End Sub

    gruss
    santo
     
  3. Hallo santo,

    ich hab dir mal ein Beispiel von NoNet, das ursprünglich für Checkboxen auf einem Tabellenblatt geschrieben war, für Textboxen auf einem Userformular umgestrickt. Die angehängte Datei enthält folgenden Code im Modul der Arbeitsmappe:

    Code:
    Es gibt ein Userformular mit 5 Textboxen und einem Commandbutton mit folgendem Code:

    Code:
    Schließlich gibt es noch ein Klassenmodul mit folgendem Code:

    Code:
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
  4. in Formular TextBox auf Inhalt prüfen

    Hallo Ingolf,

    wenn du im Klassenmodul folgendes Makro verwendest, kann man gar nichts anderes als Zahlen eingeben:


    Code eingefügt mit
     
  5. Hallo Peter,

    wow, das ist natürlich wesentlich besser. Eine Frage hätte ich dazu aber noch. Warum beschränkst du die Prüfung auf die Eingabe des ersten Zeichens in eine Textbox? Wenn man zuerst eine Ziffer eingibt und anschließend einen Buchstaben (Vertipper), wird das ja akzeptiert. Falls du damit die spätere Eingabe eines Dezimalkommas ermöglichen willst, das geht ja auch über eine weitere Case-Anweisung. Dann also so:

    Code:
     
  6. Hallo nochmal,

    ich hab das nochmal erweitert, damit auch Plus- und Minuszeichen vor der Zahl eingegeben werden können und damit das Dezimalkomma nur einmal eingegeben werden kann.

    Code:
     
  7. hallo zusammen

    Danke für die Tipps.
    Damit es bei mir läuft, habe ich statt "Worboin Formular TextBox auf Inhalt prüfen o_Open" diesen Teil "hinters Userform "UserForm_Initialize() eingefügt. Soweit so gut.
    Wie übergebe ich jetzt noch, dass nur die Textboxen bspw. 3-5 überprüft werden?



    Gruss
    Santo
     
  8. in Formular TextBox auf Inhalt prüfen

    Hallo Santo,

    dafür musst du genau den Teil, den du vom Workbook_Open-Ereignis auf das UserForm_Initialize-Ereignis umgeschrieben hast folgendermaßen ändern:

    Code:
     
  9. Hallo Ingolf

    habs begriffen. Hab das jetzt in unserem Bsp mal für die TextBoxen 3&4 so umgesetzt:

    Private Sub ctlTBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    Code:
     
  10. Hallo

    gibt es eine Möglichkeit, dass ich diesen Teil unseres Gesamten Coding, welchen wir für die Prüfung des Inhaltes geschrieben haben, nicht hinter jedes einzelne Userform schreiben muss?

    Dachte irgendwie an Me.controls..., statt Finanzen_CHF.Controls, gelingt mir aber nicht. Vor allem nicht, wenn ich unten stehendes Coding in einem eigenen Modul stehen habe, was ich aber eigentlich möchte. Dadurch könnte ich dann einfach, bspw. mittels InitTextBoxes oder aber InitTextBoxes Me aufrufen und zwar jedes Mal wenn das gerade zu ladende Userform initializiert wird. Das wäre das genialste.

    Hat jemand eine Idee?

    Code:
     
  11. Hallo Santo,

    eine Idee hätte ich dazu: In die Codemodule aller betroffenen Userformulare kommt folgendes:

    Code:
    Das Konstrukt ist nicht getestet, also bitte zunächst in eine Kopie implementieren und testen!

    Gruß Ingolf
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
  12. Hallo Ingolf

    bei folgender Zeile kommt eine Fehlermeldung 438 ("Objekt unterstützt diese Eigenschaft oder Methode nicht"):

    For Each objTBox In .VBComponents(strUForm).Controls

    Versteh ich aber nicht. Wieso sollte das nicht gehen?

    lg
    santo
     
  13. in Formular TextBox auf Inhalt prüfen

    Hallo Santo,

    neuer Versuch. Code für die Userformulare:

    Code:
    Gruß Ingolf
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
  14. Hallo Ingolf

    ich werde dein Versuch gleich mal testen. Allerdings habe ich einen eigen Versuch gestartet. Zuvor habe ich aber unter Extras im Excel, bei Sicherheit, Makros, bei vertrauenswürdige Quellen "Zugriff auf Visual Basic-Projekt vertrauen" bestätigt. Anschliessend habe ich noch in der Entwicklungsumgebung die Objektbibliothek "Microsoft Visual Basic for Application Extensibility 5.3" eingebunden.

    Code:
     
  15. Hallo Santo,

    der Versuch Set frm = strUForm kann nicht funktionieren. frm ist eine Objektvariable und strUForm ist eine Stringvariable. Das hinter dem String in dieser Variablen der Name eines Userformulares steckt, welches du der Objektvariablen zuweisen willst, kann Excel nicht wissen. Damit Excel das weiß, benötigst du das Konstrukt Set frm = ThisWorkbook.VBProject.VBComponents(strUForm). Mit deinem zweiten Versuch über die Variable objVBComp gehst du ja genau diesen Weg. Dieser zweite Versuch entspricht in gewisser Weise meinem ersten Versuch. In beiden Fällen wird versucht, das Userformular über ThisWorkbook.VBProject.VBComponents(strUForm) anzusprechen.

    Ich habe mittlerweile eine Vorstellung davon, warum das nicht funktioniert. Wenn du im VBA-Editor ein Userformular erstellst, dann erstellst du damit kein Objekt, sondern eine benutzerdefinierte Klasse eines Objektes. Also nur die Beschreibung eines Objektes. "Beschreibung" bitte nicht zu wörtlich nehmen. Eine Klasse kann man sich als Beschreibung oder Bauplan eines Objektes vorstellen, etwas anderes bedeutet "Beschreibung" hier nicht.

    (Einschub: Ich bin mir nicht ganz sicher, ob man das als Klasse bezeichnen kann. Die Klasse "UserForm" wird ja bereits von der Excel-Objektbibliothek zur Verfügung gestellt. Beim Erstellen eines Userformulares wird diese Klasse dann benutzerspezifisch ausgestaltet. Das Ganze ist also irgendwie ein Zwischending.)

    Erst mit der VBA-Methode Show wird aus deiner Beschreibung ein konkretes Objekt erstellt - erst jetzt können zum Beispiel Textboxen einen Inhalt bekommen. Wird das Userformular geschlossen, ist auch der Inhalt der Textboxen futsch, denn es existieren keine Textboxen mehr, nur noch die Klasse "Textbox", also der Bauplan, und der kann keinen Text enthalten. Mit dem Ausführen der Methode Unload oder spätestens beim Beenden des Makros hört das Objekt also wieder auf zu existieren. Über ThisWorkbook.VBProject.VBComponents(strUForm) wird nun nicht das existierende Objekt selbst, sondern dessen Beschreibung, also die benutzerdefinierte Klasse angesprochen. Eine Beschreibung hat aber keine Controls, sondern eben nur Beschreibungen von Controls. Daher schlägt der Versuch fehl, auf diese Weise eine Controls-Auflistung zu bekommen.

    Mit meinem zweiten Versuch bin ich daher dazu übergegangen, das Userformular von der Initializeprozedur als Objekt an die Prozedur InitTextBoxes zu übergeben. So sollte es nun funktionieren.

    Gruß Ingolf
     
Thema:

in Formular TextBox auf Inhalt prüfen

Die Seite wird geladen...
  1. in Formular TextBox auf Inhalt prüfen - Similar Threads - Formular TextBox Inhalt

  2. Formular mit Datensatz füllen

    in Microsoft Access Hilfe
    Formular mit Datensatz füllen: Hallo zusammen! Ich habe vor drei Monaten angefangen die Datenbanken mit Access 365 zu lernen. Jetzt stoppt mich seit einiger Zeit ein Problem, für das ich keine Lösung finde. Hoffe sehr auf eure...
  3. Suche Anleitung Formularerstellung

    in Microsoft Outlook Hilfe
    Suche Anleitung Formularerstellung: Hallo, ich suche eine halbwegs nachvollziehbare Anleitung wie man in Outlook ein Formular erstellt und dieses dann verwendet. Mit der MS-Outlook Hilfe komme ich nicht weiter. Im Internet habe ich...
  4. Werteübergabe an Formular

    in Microsoft Access Hilfe
    Werteübergabe an Formular: Anfängerfrage zur Werteübergabe Formular an Formular. Ich versuche nun schon einige Stunden diese Übergabe und komme auf kein Ergebnis. 1. Aufruf aus aktuellem Formular: Private Sub...
  5. Formular ausfüllen mit drag an drop (hin und her schieben)

    in Microsoft Access Hilfe
    Formular ausfüllen mit drag an drop (hin und her schieben): Guten Morgen zusammen :) Ich würde gerne ein Formular erstellen, dass man mit hin und her schieben ausfüllen/bearbeiten kann. Hier das Beispiel um es besser zu beschreiben: 1. 1 Mitarbeiter ist...
  6. Alle Textboxen aller Formulare entleeren

    in Microsoft Excel Hilfe
    Alle Textboxen aller Formulare entleeren: Hallo zusammen, Ich bin noch ziemlich unerfahren was VBA angeht und versuche mich gerade an einem kleinen Projekt. Dabei soll über eine Abfolge von Formularen Werte abgefragt werden und in ein...
  7. Bullets/Aufzählungszeichen in Textbox im Formular

    in Microsoft Access Hilfe
    Bullets/Aufzählungszeichen in Textbox im Formular: Kann mir jemand dabei helfen? Ich möchte in meinem Formular gerne in einer Textbox die Möglichkeit haben den Text auch mit Bullets/Aufzählungszeichen schreiben zu können. Ist das möglich? 86772
  8. Word Formular Textbox

    in Microsoft Word Hilfe
    Word Formular Textbox: Hallo zusammen, beisse mir bereits seit mehreren Tagen an folgendem Problem die Zähne aus: In einem Formular habe ich eine Textbox als Feld für Adressen eingerichtet. Nun folgendes...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden