Frage

Wie bekommen Sie Tabellendaten in Excel selbst neu zu berechnen aus VBA, ohne den Kluges nur einen Zellwert zu ändern?

War es hilfreich?

Lösung

Die folgenden Zeilen werden den Trick:

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

Edit: Die .Calculate() Methode nicht für alle Funktionen arbeiten. Getestet habe ich es auf einem Blatt mit Add-in-Array-Funktionen. Die Herstellung Blatt Ich verwende ist komplex genug, dass ich will nicht die .CalculateFull() Methode testen, aber es kann funktionieren.

Andere Tipps

Das sollte es tun ...

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

' recalculate a specific range
Worksheets(1).Columns(1).Calculate

Manchmal wird Schluckauf Excel und braucht einen Kick-Start eine Gleichung erneut anwenden. Dies geschieht in einigen Fällen, wenn Sie benutzerdefinierte Formeln verwenden.

Stellen Sie sicher, dass Sie das folgende Skript

ActiveSheet.EnableCalculation = True

Wenden Sie die Gleichung der Wahl.

Cells(RowA,ColB).Formula = Cells(RowA,ColB).Formula

Dies kann dann durchgeschleift wird je nach Bedarf.

Sie können auch versuchen,

Application.CalculateFull

oder

Application.CalculateFullRebuild

Wenn Sie nichts dagegen haben alle offenen Arbeitsmappen Wiederaufbau, anstatt nur das aktive Arbeitsblatt. (CalculateFullRebuild umbaut Abhängigkeiten als auch.)

hatte ich ein Problem mit weg vom Bild eines Hintergrunds drehen (a ENTWURF Wasserzeichen) in VBA. Mein Wechsel zeigte nicht nach oben (die mit der Sheets(1).PageSetup.CenterHeader = "" Methode durchgeführt wurde) - so musste ich einen Weg zu aktualisieren. Der ActiveSheet.EnableCalculation Ansatz hat zum Teil den Trick, aber nicht ungenutzt Zellen decken.

Am Ende fand ich, was ich mit einem Einzeiler benötigt, die das Bild verschwinden gemacht, als es nicht mehr gesetzt: -

Application.ScreenUpdating = True

Nach einer Datenverbindung zu aktualisieren, einige UDF wurden Ausführung nicht. Mit einem Unterprogramm, ich habe versucht, eine einzelne Spalte recalcuate mit:

Sheets("mysheet").Columns("D").Calculate

Aber obige Aussage hatte keine Wirkung. Keine der oben genannten Lösungen geholfen, mit der Ausnahme kambeeks Vorschlag Formeln zu ersetzen gearbeitet und war schnell, wenn manuelle recalc eingeschaltet während der Aktualisierung. Im Folgenden Code mein Problem gelöst, auch wenn sie nicht genau verantwortlich OP „kluge“ Kommentar, es eine schnelle / zuverlässige Lösung zur Verfügung gestellt, um eine Neuberechnung der vom Benutzer angegebenen zu zwingen Zellen.

Application.Calculation = xlManual
DoEvents
For Each mycell In Sheets("mysheet").Range("D9:D750").Cells
    mycell.Formula = mycell.Formula
Next
DoEvents
Application.Calculation = xlAutomatic
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top