Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
652to656
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
652to656
652to656
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

48 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige