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 hat Ahnung

    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. Hilfe

    in Microsoft Excel Hilfe
    Hilfe: Liebe Alle, ich bin ganz neu in diesem Forum und bräuchte Hilfe zu einem Excel Projekt. Ich möchte (siehe Bild 1) das die Felder die dort ausgefüllt werden automatisch in Bild 2 übertragen in...
  3. Aneignen von VBA-Kenntnissen - wie und wo?

    in Microsoft Excel Hilfe
    Aneignen von VBA-Kenntnissen - wie und wo?: Hallo zusammen, ich habe es ohne VBA-Kenntnisse geschafft, eine sehr umfangreiche, funktionsfähige Excel-Datei mit einigen Makros zu erstellen. Nun kommen im Laufe der Nutzung Fehlermeldungen,...
  4. Formelbezüge ändern sich nach Kopieren mit VBA nicht

    in Microsoft Excel Hilfe
    Formelbezüge ändern sich nach Kopieren mit VBA nicht: Hallo liebes Forum, So langsam bringt mich Excel um den Verstand, vieleicht könnt Ihr mir weiterhelfen... Ich Kopiere per button mit VBA 4 Source Zeilen (Eine Auftragserfassung und...
  5. MS ACCESS Insert into Foto in Datenbank

    in Microsoft Access Hilfe
    MS ACCESS Insert into Foto in Datenbank: Hallo. Ich benutze MS ACCESS im Office 365. Habe eine Anwendung geschrieben, in der in einem Formular ein Foto im Typ Bild dargestellt wird. Ich möchte nun dieses Foto mittels einem "Insert...
  6. Typen unvertäglich

    in Microsoft Excel Hilfe
    Typen unvertäglich: Ich versuche in meiner Tabelle ein Eingabeformular zu erstellen, bei dem ich in D13 einen "Key" eingebe, nach dem dann in der Tabelle gesucht wird und dann in den passenden Tabellen gespeichert...
  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