Microsoft Excel

Herbers Excel/VBA-Archiv

Evaluate-Function


Betrifft: Evaluate-Function
von: Anton Buderus
Geschrieben am: 24.11.2016 11:40:19

Hallo!

1) Kann man diese Makro so modifizieren, dass Zahlen, welche rot formatiert sind, bei der Berechnung nicht berücksichtigt werden? Also, das hat den Sinn, dass ich zum Beispiel mal schnell Zahlen aus der zu berechnenden Zeile entnehmen will, aber eben nicht löschen.

2) Irgendwie habe ich das Gefühl, dass ich, wenn ich eine weitere Exceldatei öffne, dies Auswirkungen auf die Datei mit diesem Makro hat. Kann das sein? Ich habe das Makro in einem Modul, mit dem Namen Modul 1 eingefügt. Hat das dann Auswirkungen auf andere Exceldateien? Wie ist es richtig?

Function ev(t As String) As Variant
  Dim i As Long
  Dim t1 As String
  Dim t2 As String
  
For i = 1 To Len(t)
    t1 = Mid$(t, i, 1)
    If t1 Like "[(-9*]" Then
        If t1 = "," Then
              t2 = t2 & "."
        Else
              t2 = t2 & t1
        End If
    End If
Next
  Debug.Print t2
  ev = Evaluate(t2)
  
  End Function

  

Betrifft: AW: Evaluate-Function
von: Anton Buderus
Geschrieben am: 24.11.2016 11:49:00

Noch besser wäre es eigentlich, wenn die vorgenannte Funktion so abgeändert werden könnte, dass ich diese als zweite Funktion ev2() nutzen könnte, welche mir nur die Zahlen in roter Formatierung ausrechnet. Dann könnte ich noch eine 3 und 4 Funktion für jeweils blau und lila mir bauen.
Ist das möglich?


  

Betrifft: AW: Evaluate-Function
von: Daniel
Geschrieben am: 24.11.2016 13:10:36

HI
nein, nicht in diesem Code.
eine String-Variable enthält nur die Textdaten, aber keinerlei Format-Informationen.
Eventuell könnte man dort ansetzen, wo du den string t aus den Zellen erstellst und man noch Zugriff auf die Zellobjekteigenschaften hat.

Gruß Daniel


  

Betrifft: AW: Evaluate-Function
von: Antonio Buderus
Geschrieben am: 24.11.2016 13:44:40

Ok, wäre natürlich prima, wenn es funktionieren würde. Ich kann es aber leider nicht programmieren....


  

Betrifft: AW: Evaluate-Function
von: Antonio Buderus
Geschrieben am: 24.11.2016 13:50:49

Könnte man es vlt. auch so lösen, dass die Werte (als Text eingegeben, welche in einer Zelle stehen und z.B. rot sind, in eine andere Zelle verknüpft sind. Also praktisch nicht der ganze Zelleninhalt, sondern nur die Zeichen, die rot sind, in die andere Zeile übernommen werden? Die Function Evaluate könnte dann die gleiche bleiben..


  

Betrifft: AW: Evaluate-Function
von: Daniel
Geschrieben am: 24.11.2016 14:10:39

Hi
das sind mir jetzt zu wenig Informationen, um damit was anfangen zu können.
hast du ggf ne Beispieldatei, wie das ganze aussieht?
zu Programmieren wird's auf jeden Fall etwas koplizierter.
Gruß Daniel


  

Betrifft: AW: Evaluate-Function
von: Anton Buderus
Geschrieben am: 24.11.2016 14:21:22

Hallo,
ich habe mal ein Bild hochgeladen. Die Frage wäre, ob die roten Zeichen (1) in Spalte (3) mit einer Verknüpfung wie zum Beispiel "=roterText(A1)" übernommen werden können. In einer noch einzufügenden weiteren Spalte könnte dann mit Hilfe der ev(A3)-Funktion die Berechnung erfolgen. In Spalte (2) erfolgt die Berechnung wie gehabt ebenfalls mit ev(A1)




  

Betrifft: AW: Evaluate-Function
von: Daniel
Geschrieben am: 24.11.2016 14:30:44

Hi
wenn du den Text ohne die roten Zeichen haben willst, dann mit dieser Schleife:

With Range("A1")
For i = 1 To Len(.Text)
    If .Characters(i, 1).Font.Color <> vbRed Then
        txt = txt & Mid(.Text, i, 1)
    End If
Next
end with
diesen Text musst du dann deiner Funktion mit dem Evaluate übergeben.

Gruß Daniel


  

Betrifft: AW: Evaluate-Function
von: Anton Buderus
Geschrieben am: 24.11.2016 14:38:39

Hallo,
genau umgekehrt, den roten Text hätte ich gerne in zum Beispiel Zelle A3.
Und irgendwie als function. So dass ich z.B. mit der function "=roterText(A1)" oder "=roterText(d5)" einen beliebigen Zelle auslesen kann...
Danke Daniel.
Wie kann ich Dich für Deine Arbeit bezahlen?


  

Betrifft: AW: Evaluate-Function
von: Daniel
Geschrieben am: 24.11.2016 14:43:28

bezahlen geht leider nicht.
aber um das umzudrehen musst du doch nur das ´<> durch ein = austauschen.
Wenn du nicht mal das alleine hinbekommst, solltest du dir jemanden suchen, der das für dich programmiert.

Gruß Daniel


  

Betrifft: AW: Evaluate-Function
von: Anton Buderus
Geschrieben am: 24.11.2016 14:46:09

Ja, das habe ich mir schon gedacht mit dem rumdrehen.
Mein Problem war eher, wie bekommt man dies als function?
Und da dachte ich, ich frage es gleich mit, falls es doch nicht funktioniert mit dem rumdrehen.
Schade, ich hätte Dir gerne was für Deine Mühe zu kommen lassen.


  

Betrifft: Wäre dir mit Folgendem geholfen, ...
von: Luc:-?
Geschrieben am: 24.11.2016 20:10:04

…Anton?

 ABCDEFGH
18
(1,40+1,60+4,00+1,40+4,30+2,40+1,00+2,75+3,25+4,45+7,20+2,70+2,75+1,00+1,10+1,10)*2,81119,144 m²10,45 m
ZellFormeln:G18:=TxEval(WECHSELN(A18;",";"."))H18:=TxEval(WECHSELN(LtUpPart(A18;3);",";"."))
19
Die verwendeten UDFs findest du im Archiv unter folgenden Links:
LtUpPart http://www.herber.de/bbs/user/93924.xlsm
Das ist eine BspDatei für eine andere Anwendung dieser Fkt, in der die UDF im VBA-Projekt-Teil ent­halten ist. Auf dem Blatt wdn nur deshalb Fehler ausgewiesen, weil ich vergessen hatte, mein Dauer-AddIn vor dem Hochladen zu deaktivieren. Wenn du mit der Bsp­Datei experi­mentieren willst, musst du nur den angegebenen Pfad vor der UDF löschen, dann wird auch die in der Datei ent­hal­tene UDF verwendet.
Die Enumeration dabei nicht vergessen! Diese ist allerdings nicht mehr ganz aktuell. Aus cxRTrue habe ich inzwischen cxTrue und aus cxPTrue cxCTrue gemacht, um das an ähnliche VB-Enumerationen anzupassen. Ändern (auch in der UDF!) musst du das aber nur, wenn du andere UDFs von mir, die diese Enumeration nach aktuellem Stand benötigen, verwendest.
TxEval (aktuelle Version) http://www.herber.de/forum/archiv/1500to1504/1501008_Summe_ueber_mehrere_Tabellenblaetter_mit_Bedingung.html#1501263
Feedback nicht unerwünscht! Gruß, Luc :-?

Besser informiert mit …