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. VBA in einer Zeile zu lang

    in Microsoft Excel Hilfe
    VBA in einer Zeile zu lang: Moin, mein VBA Code ist für eine Zeile zu lang. Kann mir einer helfen wie ich den auf 2 Zeilen aufteilen Kann? arrSchuhDaten = Array(Range("A6"), Range("F6"), Range("J6"), Range("A7"),...
  3. Listbox wird nicht breiter, Schriftgrösse ändert sich

    in Microsoft Excel Hilfe
    Listbox wird nicht breiter, Schriftgrösse ändert sich: Hallo, ich habe ein Formular dessen Breite ich mit der Maus ändern kann. Im Formular habe ich einen Rahmen und darin eine Listbox deren Breite an die Formularbreite angepasst wird....
  4. Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch

    in Microsoft Excel Hilfe
    Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch: Hallo zusammen, erstmal danke für all die Tipps und Kniffe, die ich ohne eigenen Thread gefunden und gelernt habe. Leider finde ich mein Thema nirgendwo... Aktuell habe ich zwei Spalten mit...
  5. Per Hyperlink ausgeblendetes Blatt einblenden

    in Microsoft Excel Hilfe
    Per Hyperlink ausgeblendetes Blatt einblenden: Hola ins Forum, ich bräuchte mal wieder eure Hilfe. Ich habe ein Tabellenblatt das mir als Register dient und wo Hyperlinks eingefügt sind um auf das dazugehörige Blatt zu springen. Diese Blätter...
  6. Bilder über VBA Größe und DPI ändern für Webshop

    in Microsoft Excel Hilfe
    Bilder über VBA Größe und DPI ändern für Webshop: Hallo Excel Spezialisten, Ich habe mir eine recht aufwendige Tabelle gebastelt, aus der ich Daten für meinen Webshop generiere und in einer .csv bereitstelle. Es werden neue Preislisten...
  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