Microsoft Excel

Herbers Excel/VBA-Archiv

Funktion aktualisiert sich nicht automatisch | Herbers Excel-Forum


Betrifft: Funktion aktualisiert sich nicht automatisch von: Bernd
Geschrieben am: 22.10.2008 12:23:11

Ich habe hier die folgende Funktion, welche mir eine Formel aus einer Zelle als Zahlen darstellt. Also aus =E20*E20 wird z.B. "5*5" ausgegeben.


Option Explicit
Option Compare Text

'(c)1999 Andreas Kirschbaum

Const TrennZ = "-+/*^()"
Const ZahlZ = "-.,0123456789"
Const HochZ = "0123"
Const Hoch2Z = "º¹²³"

Function FORMELTEXT(Bereich, Aktuell As String) As String

  Dim Art As Integer, i As Integer, j As Integer, k As Integer, n As Integer
  Dim BezAnf As Integer
  Dim tI As String, tA As String, c As String * 1, buf As String * 256, tF As String
   
  On Error Resume Next
  tI = Bereich.FormulaLocal
  If Left(tI, 1) = "=" Then
    tA = ""
    Art = 0                                   ' 0: Operand erwartet
    n = Len(tI)
    For i = 2 To n + 1
      If i > n Then
        c = ""
        k = 1
      Else
        c = Mid(tI, i, 1)
        k = InStr(TrennZ, c)
      End If
      If k = 0 Then
        k = InStr(ZahlZ, c)
        If k = 0 Then
          If Art = 0 Then
            Art = 2                           ' 2: Bezug oder Funktion
            BezAnf = i
          End If
        Else
          If Art < 2 Then                     ' 1: Operand
            Art = 1
            tA = tA & c
          End If
        End If
      Else
        If Art = 2 Then
          If c = "(" Then
            tA = tA & Mid(tI, BezAnf, i - BezAnf)
          Else
            With Range(Mid(tI, BezAnf, i - BezAnf))
              tF = CStr(.Value)
              tF = Format(.Value, .NumberFormat)
            End With
            tA = tA & tF
          End If
        End If
        Select Case c
        Case "*"
          c = "·"
        Case "^"
          j = InStr(HochZ, Mid(tI, i + 1, 1))
          If i < n And j > 0 And (i + 1 = n Or InStr(TrennZ, Mid(tI, i + 2, 1)) > 0) Then
            c = Mid(Hoch2Z, j, 1)
            i = i + 1
          End If
        End Select
        tA = tA & c
        Art = 0                               ' 0: Operand erwartet
      End If
    Next
    n = Len(tA)
    buf = tA
    FORMELTEXT = Left(tA, n)
  Else
    FORMELTEXT = ""
  End If

End Function



Allerdings aktualisiert sich diese Funktion nicht automatisch, wenn man einen Wert ändert und ich finde den Fehler einfach nicht.

Ich hatte es auch schon mit einem Application.Volatile am Funktionsanfang versucht, was grundsätzlich geht. Allerdings habe ich dann das Problem, wenn ich die Funktion in einem Arbeitsblatt A aufrufe, werden die Werte in Arbeitsblatt B wieder gelöscht und es stehen keine Zahlen mehr da. In obigem Beispiel würde dann nur noch "*" erscheinen.

Wäre nett, wenn mir jemand sagen könnte, was ich da ändern muss. Gefunden habe ich leider außer diesem Volatile keine weiteren Lösungsansätze, wobei dieses eben auch nicht wirklich optimal ist.

  

Betrifft: AW: Funktion aktualisiert sich nicht automatisch von: Rudi Maintaire
Geschrieben am: 22.10.2008 13:05:38

Hallo,
das ist der Nachteil an UDF

Gruß
Rudi


  

Betrifft: AW: Funktion aktualisiert sich nicht automatisch von: Bernd
Geschrieben am: 22.10.2008 13:08:31

Das heißt, ich muss damit leben?


  

Betrifft: AW: Funktion aktualisiert sich nicht automatisch von: Jürgen V.
Geschrieben am: 22.10.2008 14:30:04

Hallo Bernd,

nein, denn eigentlich sollte auch die UDF neu berechnet werden.

Ich habe den von Dir eingestellten Code ausprobiert, erhalte aber nur ein unsinniges Ergebnis: in Zelle D2 steht die Formel "=B2*B3", in E2 "=Formeltext(d2)" und als Ergebnis erhalte ich in E2 "Ge0eral·Ge0eral " (Hinweis: Da der Paramater "Aktuell" im Code der Funktion nicht verwendet wird, habe ich ihn bei meinem Test aus der Fuktionsdeklaration entfernt).

Gruß, Jürgen


  

Betrifft: AW: Funktion aktualisiert sich nicht automatisch von: Bernd
Geschrieben am: 22.10.2008 16:38:41

Du musst die zwei Felder B2 und B3 jeweils als Zahl formatieren, dann funktioniert es. Hatte das Problem am Anfang auch und wusste damit nix anzufangen.


  

Betrifft: AW: Funktion aktualisiert sich nicht automatisch von: Jürgen V.
Geschrieben am: 22.10.2008 23:19:28

Hallo Bernd,



ich habe B2 und B3 nun als Zahl formatiert, damit erhalte ich ein gescheites Ergebnis, das sich auch bei Änderungen in B2 und B3 automatisch aktualisiert, mit anderen Worten: bei mir funktioniert's.



Nur um sicher zu gehen: Du hast nicht die Neuberechnung auf "manuell" gestellt?



Gruß, Jürgen


  

Betrifft: AW: Funktion aktualisiert sich nicht automatisch von: Bernd
Geschrieben am: 23.10.2008 07:20:48

Ne, Berechnung ist hier definitiv auf Automatisch. Ich werde mal sehen, ob ich nachher eine Beispieldatei hochladen kann, bei der das Problem nachweisbar auftritt.


Beiträge aus den Excel-Beispielen zum Thema "Funktion aktualisiert sich nicht automatisch"