Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA-Funktion - Berechnung aktualisieren

VBA-Funktion - Berechnung aktualisieren
17.08.2005 09:15:08
Wolfgang
Hallo!
Diesmal eine VBA-Anfängerfrage: Habe eine VBA-Funktion geschrieben, die soweit auch funktioniert, ABER: Ändert sich eines der übergebenen Argumente, so wird das Ergebnis der Funktion nicht automatisch aktualisiert. Auch F9 oder Umsch+F9 helfen nicht, genausowenig wie das Schließen und wieder Öffnen der gesamten Datei. Nur der Doppelklick in jede einzelne Zelle, die die Funktion verwendet (oder gleichbedeutend F2) bewirken eine Neuberechnung.

Wie kann man eine solche Aktualisierung automatisieren oder zumindest manuell global durchführen?
Danke im Voraus,
Wolfgang
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Funktion - Berechnung aktualisieren
17.08.2005 09:21:31
Matthias
Hallo Wolfgang,
wie lautet denn die erste Zeile deiner Funktion (Function xyz(...) As ...)?
Gruß Matthias
AW: VBA-Funktion - Berechnung aktualisieren
17.08.2005 09:25:52
Wolfgang
Hallo Matthias!
Meine Funktion beginnt mit: "Function Funktion(X As String, Y As String) as Double"
AW: VBA-Funktion - Berechnung aktualisieren
17.08.2005 09:32:59
Matthias
Hallo Wolfgang,
und unter Extras, Optionen, Berechnung ist die Berechnung auf automatisch?
Klappt denn Strg-Alt-F9?
baue das mal nach und schau, ob es funktioniert:
Function testf(x As String, y As String) testf = x & " " & y End Function
 
 AB
1HiWolfgang
2Hi Wolfgang 
Formeln der Tabelle
A2 : =testf(A1;B1)
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Gruß Matthias
Anzeige
AW: VBA-Funktion - Berechnung aktualisieren
17.08.2005 11:06:43
wolfgang
Hallo Matthias!
Dein Beispiel funktionierte problemlos, Veränderungen in A1 und B1 wurden sofort übernommen. Mit Strg+Alt+F9 funktioniert das Aktualisieren auch bei meiner Funktion (dauert zwar eine gute Minute, das macht aber nichts).
Bei Umsch+F9 ist mir jetzt aufgefallen, dass in der Statuszeile zwar "Berechnet" steht, aber auch nach 10 Minuten kein Ergebnis folgt.
Danke für deine Hilfe,
Wolfgang
Anzeige
AW: VBA-Funktion - Berechnung aktualisieren
17.08.2005 11:22:09
Matthias
Hallo Wolfgang,
dann poste doch mal die komplette Funktion.
Gruß Matthias
AW: VBA-Funktion - Berechnung aktualisieren
17.08.2005 11:55:24
Wolfgang
Bittes sehr: Es handelt sich um eine Funktion, die die Molmassen von Elementen und Verbindungen eines Tabellenblattes zusammenzählt. Das Element steht dabei immer in Reihe A, die zugehörige Molmasse in G. Übergeben werden der Tabellenblattname und das Element. Molsumme("Tabelle1";"Fe") soll also "Fe" elementar auch von Verbindungen wie Fe2O3 und Fe3O4 mitzählen. Das Grundgerüst hab ich eh nur mit der hilfe dieses Forums zustande gebracht (mal ein dickes Lob an dieser Stelle!), ich habs dann aber noch verändert und ausgebaut.
Hier die Funktion:
Function MolSumme(Tabellenblatt As String, Element As String) As Double Dim cell As Range Dim ipos As Integer Dim myVal As Double Dim ch As String MolSumme = 0 For Each cell In Intersect(Worksheets(Tabellenblatt).UsedRange, Worksheets(Tabellenblatt).Range("A:A")) ipos = InStr(cell.Value, Element) While ipos > 0 If Len(Element) = 1 Then ch = Mid(cell.Value, ipos + 1, 1) ElseIf Len(Element) = 2 Then ch = Mid(cell.Value, ipos + 2, 1) End If If ch Like "[a-z]" Then myVal = 0 ElseIf ch Like "[0-9]" Then myVal = Val(Mid(cell.Value, ipos + Len(Element))) Else myVal = 1 End If MolSumme = MolSumme + myVal * cell.Offset(0, 6).Value ipos = InStr(ipos + Len(Element), cell.Value, Element) Wend Next Set Ws = Nothing End Function
Anzeige
AW: VBA-Funktion - Berechnung aktualisieren
17.08.2005 12:20:16
Matthias
Hallo Wolfgang,
zu hast da eine Rekursie Funktion - ich weiß nicht ob du das beabsichtigst:

MolSumme = MolSumme + myVal * cell.Offset(0, 6).Value

Der Ausdruck rechts enthält "Molsumme", d.h. hier wird die Funktion nochmal aufgerufen - mich wundert es, dass das überhaupt funktioniert ohne Argumente.
Besser, du nimmst eine Temporäre Variable und übergibst dessen Wert am Schluss:

Function MolSumme(Tabellenblatt As String, Element As String) As Double
Dim cell As Range
Dim ipos As Integer
Dim myVal As Double
Dim ch As String
Dim Tmp As Double
Tmp = 0
For Each cell In Intersect(Worksheets(Tabellenblatt).UsedRange, Worksheets(Tabellenblatt).Range("A:A"))
ipos = InStr(cell.Value, Element)
While ipos > 0
If Len(Element) = 1 Then
ch = Mid(cell.Value, ipos + 1, 1)
ElseIf Len(Element) = 2 Then
ch = Mid(cell.Value, ipos + 2, 1)
End If
If ch Like "[a-z]" Then
myVal = 0
ElseIf ch Like "[0-9]" Then
myVal = Val(Mid(cell.Value, ipos + Len(Element)))
Else
myVal = 1
End If
Tmp = Tmp + myVal * cell.Offset(0, 6).Value
ipos = InStr(ipos + Len(Element), cell.Value, Element)
Wend
Next
Set Ws = Nothing
MolSumme = Tmp
End Function

Jetzt müsste es schneller gehen...
Schau mal was jetzt besser geht und was noch nicht, und melde dich dann wieder.
Gruß Matthias
Anzeige
AW: VBA-Funktion - Berechnung aktualisieren
17.08.2005 12:39:50
Wolfgang
Besten Dank, Matthias, das wars!
Jetzt wird *sofort* nach der Eingabe neu berechnet, dafür dauerts jetzt nur noch ein, zwei Sekunden :-)
Mit freundlichen Grüßen,
Wolfgang
AW: VBA-Funktion - Berechnung aktualisieren
17.08.2005 11:41:48
Markus
Hi Wolfgang,
folgender Workaround müsste klappen:
Nimm den Makrorekorder und zeichne genau die Aktion auf die du machst (Doppelt reinklicken). Wenn das für mehrere Felder passieren soll dementsprechend dublizieren. Dann das Makro an geeigneter Stelle aufrufen - wenn deine Funktion in einer anderen Funktion oder in einem Makro aufgereufen wird dort zum beispiel. Und schon sind alle Felder neu berechnen...Hoffe das klappt!?
Anzeige
AW: VBA-Funktion - Berechnung aktualisieren
17.08.2005 12:44:42
Wolfgang
Hallo Markus!
Danke für deine gute Idee zum Workaround, das hätt ich als nächstes ausprobiert, jetzt funktioniert aber wieder alles richtig.
Mit freundlichen Grüßen,
Wolfgang
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Automatisches Aktualisieren von VBA-Funktionen in Excel


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass Deine VBA-Funktion in Excel automatisch aktualisiert wird, befolge diese Schritte:

  1. Überprüfe die Berechnungseinstellungen:

    • Gehe zu Extras > Optionen > Berechnung.
    • Stelle sicher, dass die Berechnung auf „Automatisch“ eingestellt ist.
  2. Verwende die richtige Funktion:

    • Achte darauf, dass Deine Funktion korrekt geschrieben ist. Beispiel:
      Function BeispielFunktion(x As String, y As String) As String
       BeispielFunktion = x & " " & y
      End Function
  3. Aktualisiere manuell:

    • Wenn die automatische Aktualisierung nicht funktioniert, kannst Du Strg + Alt + F9 nutzen, um alle Berechnungen in der Arbeitsmappe zu aktualisieren.
  4. Makro zur Aktualisierung erstellen:

    • Du kannst ein Makro erstellen, das die Zellen aktualisiert, wenn Du es benötigst. Beispiel:
      Sub AlleFelderAktualisieren()
       Application.CalculateFull
      End Sub

Häufige Fehler und Lösungen

  • Excel F9 funktioniert nicht: Wenn die Berechnungen sich nicht aktualisieren, überprüfe die Berechnungseinstellungen und teste Strg + Alt + F9.

  • Excel Felder aktualisieren nicht automatisch: Stelle sicher, dass die Formeln nicht in einem Bereich mit einer anderen Berechnungseinstellung liegen.

  • Formel aktualisiert nicht automatisch: Achte darauf, dass Du die Funktion nicht rekursiv aufrufst, was zu langen Berechnungszeiten führen kann.


Alternative Methoden

  1. VBA-Makro verwenden: Du kannst ein Makro aufzeichnen, das die erforderlichen Zellen mit Doppelklick aktualisiert. Das Aufzeichnen kannst Du folgendermaßen machen:

    • Gehe zu Entwicklertools > Makro aufzeichnen und führe die Doppelklick-Aktion aus.
  2. Formeln in einer Tabelle nutzen: Manchmal kann es hilfreich sein, die Berechnung über eine Tabelle zu organisieren, um sicherzustellen, dass alle Formeln sich in einem dynamischen Bereich befinden.


Praktische Beispiele

Hier ist ein Beispiel, wie Du eine Funktion implementierst, die die Molmasse berechnet und dabei automatisch aktualisiert wird:

Function MolSumme(Tabellenblatt As String, Element As String) As Double
    Dim cell As Range
    Dim ipos As Integer
    Dim myVal As Double
    Dim ch As String
    Dim Tmp As Double
    Tmp = 0
    For Each cell In Intersect(Worksheets(Tabellenblatt).UsedRange, Worksheets(Tabellenblatt).Range("A:A"))
        ipos = InStr(cell.Value, Element)
        While ipos > 0
            If Len(Element) = 1 Then
                ch = Mid(cell.Value, ipos + 1, 1)
            ElseIf Len(Element) = 2 Then
                ch = Mid(cell.Value, ipos + 2, 1)
            End If
            If ch Like "[a-z]" Then
                myVal = 0
            ElseIf ch Like "[0-9]" Then
                myVal = Val(Mid(cell.Value, ipos + Len(Element)))
            Else
                myVal = 1
            End If
            Tmp = Tmp + myVal * cell.Offset(0, 6).Value
            ipos = InStr(ipos + Len(Element), cell.Value, Element)
        Wend
    Next
    MolSumme = Tmp
End Function

Tipps für Profis

  • Benutze temporäre Variablen: Wenn Du Berechnungen in einer Funktion durchführen möchtest, nutze temporäre Variablen, um die Effizienz zu erhöhen.

  • Aktualisierung optimieren: Verwende Application.ScreenUpdating = False und Application.Calculation = xlCalculationManual am Beginn Deines Makros, um die Geschwindigkeit zu erhöhen, und aktiviere beides wieder am Ende.


FAQ: Häufige Fragen

1. Warum werden meine Excel-Formeln nicht automatisch aktualisiert?
Überprüfe die Berechnungseinstellungen unter Extras > Optionen und stelle sicher, dass sie auf „Automatisch“ gesetzt sind.

2. Wie kann ich alle Zellen in Excel gleichzeitig aktualisieren?
Mit dem Shortcut Strg + Alt + F9 kannst Du alle Berechnungen in der Arbeitsmappe durchführen.

3. Was mache ich, wenn die Funktion in VBA sehr langsam ist?
Optimiere Deine Funktion, indem Du temporäre Variablen verwendest und vermeide rekursive Aufrufe, die die Berechnungszeit verlängern können.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige