Office: (Office 365) evaluate in VBA

Helfe beim Thema evaluate in VBA in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Guten Tag! Leider komme ich bei folgendem Problem nicht weiter - vielleicht hat jemand einen Tipp für mich: Derzeitige Situation: In einer TextBox in... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von BergRadler, 1. April 2022.

  1. evaluate in VBA


    Guten Tag!
    Leider komme ich bei folgendem Problem nicht weiter - vielleicht hat jemand einen Tipp für mich:
    Derzeitige Situation:
    • In einer TextBox in einer UserForm kann ein Benutzer Daten eingeben.
    • Ist die Eingabe eine Zahl, soll diese Zahl (im Format #,##0.00) hingeschrieben werden.
    • Tippt der Benutzer Zahlen mit Rechenzeichen ein, so sollen diese Rechnungen durchgeführt werden und das Ergebnis (im Format #,##0.00) hingeschrieben werden.
    • In anderen Fällen soll eine Fehlermeldung erscheinen.
    Dazu habe ich mir eine Funktion geschrieben:
    On Error GoTo Eingabefehler:

    FehlerBerechnung = 0
    Wert2 = Format(Round(Evaluate(Replace(Wert1, ",", ".")), 2), "#,##0.00")
    UserForm1.TextBoxBetrag.Value = Wert2

    Exit Function

    Eingabefehler:
    FehlerBerechnung = 1
    MsgBox "Kein numerischer Wert eingegeben."

    Das funktioniert soweit ganz gut ... aber leider nicht immer:
    • Trage ich die Ziffer 0 in die TextBox ein, so passt alles; es steht nach dem Verlassen des Feldes 0,00 in der TextBox.
    • Trage ich die Ziffer 1 in die TextBox ein, so wird die obige Meldung "Kein numerischer Wert eingegeben." angezeigt. Das verstehe ich nicht. :-(
    • Ebenso bei 2 und 3.
    • Bei 4 klappt wieder alles; es steht nach dem Verlassen des Feldes 4,00 in der TextBox.
    • Bei 5 bekomme ich wieder eine Fehlermeldung. Auch das ist unklar ... warum sollte 5 kein numerischer Wert sein?
    • Für ganze Zahlen ab 6 scheint die Funktion wieder zu funktionieren.
    Vielleicht hat jemand eine Idee, woran das liegen könnte?

    Danke,
    Michael
     
    BergRadler, 1. April 2022
    #1
  2. Noch ein Nachtrag: Ich habe geschrieben, dass die Eingabe von "1" eine Fehlermeldung liefert.
    Die Eintragung von "1," liefert aber keine Fehlermeldung.
    Woran kann das liegen?
     
    BergRadler, 1. April 2022
    #2
  3. Beverly
    Beverly Erfahrener User
    Hi Michael,

    Tipp: wenn ein Code nicht das macht was er soll, sollte man als allererstes jegliches On Error auskommentieren, damit man sehen kann an welcher Stelle genau ein Fehler auftritt.



    evaluate in VBA Grußformelevaluate in VBA Beverly's Excel - Inn
     
    Beverly, 1. April 2022
    #3
  4. Pan
    Pan Erfahrener User

    evaluate in VBA

    Du machst einen Replace der nur bei Textwerten funktioniert und daher in einen Fehler springt, teste vorher ob die Eingabe ein Text oder eine Zahl ist. Schau dir auch das Zahlenformat der Eingabezelle an, das sollte nicht auf Text stehen.

    Pan
     
  5. @ Karin: Danke für den Tipp. Den habe ich natürlich ausprobiert; es hat sich abermals bestätigt, dass der Fehler in der Codezeile
    Wert2 = format(Round(Evaluate(Replace(Wert1, ",", ".")), 2), "#,##0.00")
    auftritt.
    Das macht mich aber nicht schlauer. :-(
    Weshalb ergibt die Codezeile einen Fehler,wenn Wert1 = 1 oder Wert1 = 2, aber nicht bei Wert1 = 4???

    @ Pan: Danke für den Hinweis. Ich habe die Funktion nun wie folgt geändert:
    On Error GoTo Eingabefehler:

    FehlerBerechnung = 0
    If IsNumeric(Wert1) Then
    Wert2 = format(Round(Wert1, 2), "#,##0.00")
    Else
    Wert2 = format(Round(Evaluate(Replace(Wert1, ",", ".")), 2), "#,##0.00")
    End If

    UserFormBuchung.TextBoxBetrag.Value = Wert2

    Exit Function

    Eingabefehler:
    FehlerBerechnung = 1
    MsgBox "Kein numerischer Wert eingegeben."

    Damit sind nun die Fehler - soweit getestet - umschifft.
    Es bleibt für mich aber rätselhaft, dass der alte Code für Wert1 = 1 oder Wert1 = 2 einen Fehler ergibt, aber nicht für Wert1 = 4 ...
     
    BergRadler, 1. April 2022
    #5
  6. Beverly
    Beverly Erfahrener User
    Wie übergibst du die Variable Wert1, also wie sieht deine komplette Function aus und woher kommt der Inhalt von Wert1 bzw. wie übergibst du deren Inhalt? Eine kleine Beispielmappe wäre sicher sehr hilfreich.



    evaluate in VBA Grußformelevaluate in VBA Beverly's Excel - Inn
     
    Beverly, 1. April 2022
    #6
  7. @ Karin: Danke, dass du nochmals an der Sache dran bist.

    So, nun komme ich mir sehr dumm vor. Habe versucht, das Problem in einer Musterdatei nachzustellen ... und da klappt alles.
    Also muss es in meiner 'großen' Datei, die ich nicht teilen kann, irgendwo anders "einen Hund begraben haben" ... obwohl diese Funktion nur beim Verlassen einer TextBox einer UserForm aufgerufen wird.

    Der einzige Unterschied, der mir auffällt:
    In der nachgebauten Datei, in der alles problemlos funktioniert, schreibt Excel in der Code-Zeile
    Wert2 = Format(Round(Evaluate(Replace(Wert1, ",", ".")), 2), "#,##0.00")
    den Begriff Format mit einem großen "F".
    In der Datei, in der es mit der ursprünglichen Variante nicht klappt, steht der Begriff Format mit einem kleinen "f".

    Warum? Keine Ahnung.
    Ist mir aber auch inzwischen recht egal, da ich eine Lösung gefunden habe (siehe oben).

    Trotzdem lade ich meine Musterdatei hier hoch - vielleicht kann sie jemand irgendwann für irgendeinen Zweck gebrauchen.
    Nochmals kurz zur Erklärung:
    • Man trägt in der UserForm in der TextBox zB Zahlen ein. Diese werden nach dem Verlassen mit zwei Nachkommastellen dargestellt.
    • Trägt man eine Rechenoperation (zB 3*4) ein, so wird beim Verlassen das Ergebnis (wiederum mit zwei Nachkommastellen) eingetragen.
    • Eingaben mit Buchstaben sind nicht erlaubt.
     
    BergRadler, 2. April 2022
    #7
  8. Beverly
    Beverly Erfahrener User

    evaluate in VBA

    Es ist natürlich so gut wie unmöglich einen Fehler zu finden wenn er nicht reproduzierbar ist - ich kann deshalb nur raten, dass das Problem irgendwie darin liegt, dass du den TextBox-Inhalt stets als Text übernimmst, auch wenn es Zahlen (mit oder ohne Dezimaltrenner) sind. Du hast zwar bereits eine funktionierende Lösung, aber mich (und vielleicht auch dich evaluate in VBA *;)*) würde schon interessieren, ob dein ursprünglicher Code in der Function richtig funktioniert, wenn du im Exit-Ereignis folgende Unterscheidung triffst und die Function bei numerischen Eingaben gar nicht erst aufrufst:

    Code:
        If IsNumeric(TextBoxBetrag) Then
            TextBoxBetrag = Format(Application.Round(TextBoxBetrag * 1, 2), "#,##0.00")
        Else
            Wert1 = TextBoxBetrag.Value
            berechnen (Wert1)
        End If
    


    evaluate in VBA Grußformelevaluate in VBA Beverly's Excel - Inn
     
    Beverly, 2. April 2022
    #8
  9. Exl121150 Erfahrener User
    Hallo,

    Das genau ist aber der springende Punkt: Es wird an dieser Stelle "Format" nicht als vordefinierte Funktion zur Umwandlung von Zahlen in Strings erkannt, sondern du wirst vermutlich irgendwo eine Deklaration wie die folgende haben:
    Dim format() As String
    Damit interpretiert der VBA-Compiler "format(..)" als eine benutzerdefinierte Array-Variable und nicht als die Standard-Konvertierungsfunktion "Format(...)"

    Ferner kann ich auch dir wieder nur empfehlen, als erste Zeile in jedem Codemodul Folgendes einzufügen (sie fehlt bei dir):
    Option Explicit
     
    Exl121150, 2. April 2022
    #9
  10. Beverly
    Beverly Erfahrener User
    Das erklärt aber nicht, weshalb es bei einigen Zahlen funktioniert und bei anderen nicht.


    evaluate in VBA Grußformelevaluate in VBA Beverly's Excel - Inn
     
    Beverly, 2. April 2022
    #10
  11. @ Karin: Ich habe dein "Code-Schnipsel" in der alten Datei ausprobiert ... Damit gibt es dort keine Fehler mehr. :-) Danke.

    @ Anton: In meiner eigentlichen Datei arbeite ich stets mit 'Option Explicit' ... Danke für den Hinweis, in der nachgebauten Datei habe ich dies vergessen.
    Bezüglich deiner Vermutung: Nein, es gibt derartige Deklaration.

    Danke für eure Denkarbeit ... da ich nun sogar mehrere Lösungen habe, bin ich zufrieden und denke über dieses Problem nicht mehr nach ... damit kann ich mich neuen Problemen widmen. :-)
     
    BergRadler, 3. April 2022
    #11
Thema:

evaluate in VBA

Die Seite wird geladen...
  1. evaluate in VBA - Similar Threads - evaluate VBA

  2. Spalten wieder einblenden per VBA

    in Microsoft Excel Hilfe
    Spalten wieder einblenden per VBA: Guten Abend zusammen, ich habe das kleine Problem das sich die Spalte "E:Z" nicht mehr einblenden lassen, weil das "Ausblenden" unter Private Sub Worksheet_Activate() steht und das...
  3. Teilweise abgerundetes Rechteck mit VBA

    in Microsoft Excel Hilfe
    Teilweise abgerundetes Rechteck mit VBA: Moin ihr Lieben, als nur Gelegenheits-Nutzer von VBA bräuchte ich mal eure Hilfe, da alle Vorschläge von ChatGPT nicht funktionieren. Ich möchte per VBA ein Rechteck zeichnen, welches links zwei...
  4. offene Word-Datei per VBA speichern

    in Microsoft Excel Hilfe
    offene Word-Datei per VBA speichern: Guten Abend zusammen, mit dem nachfolgenden Code öffne ich ein OLE-Objekt (Word-Datei) aus Excel heraus. Sheets("WORD").Select ActiveSheet.Shapes.Range(Array("Object 7")).Select...
  5. Zelle per VBA auf ihren Inhalt prüfen und reagieren sowie bei Änderung

    in Microsoft Excel Hilfe
    Zelle per VBA auf ihren Inhalt prüfen und reagieren sowie bei Änderung: Hallo zusammen, ich habe mit etwas verheddert und hoffe auf Eure Hilfe. Die Felder B111 und B112 sind zu Beginn LEER. B111 bietet ein Dropdown-Menü an, welches im Falle der Auswahl "Angebot mit...
  6. Wie Spalten per VBA mit definierten Spaltenbreiten einfügen ?

    in Microsoft Excel Hilfe
    Wie Spalten per VBA mit definierten Spaltenbreiten einfügen ?: Guten Abend zusammen, wie kann man die gewählten Spalten per VBA mit definierten Spaltenbreiten in Word einfügen ? Danke für Deine Antwort im Voraus Jens Sub EtW() ' Excel zu Word kopieren...
  7. Array Formel in VBA Evaluate?

    in Microsoft Excel Hilfe
    Array Formel in VBA Evaluate?: Hallo Leute Ich habe eine Formel die ich in eine Userform übernehme um die Daten dort zu berechnen. Dazu benutze ich Evaluate("Formel"). Bei einfachen Formeln ist es OK. Aber array Formeln...
  8. Was kann der Befehl EVALUATE ?

    in Microsoft Excel Hilfe
    Was kann der Befehl EVALUATE ?: Hallo Forum, Bei der Suche nach der Lösungen meiner (immer noch viel zu häufigen) VBA-Probleme ist mir häufig der Befehl EVALUATE aufgefallen. Häufig sogar als "most powerful function"...
  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