Excel Abrufen von Daten auf dem Blatt aktualisieren aus VBA
Frage
Wie bekommen Sie Tabellendaten in Excel selbst neu zu berechnen aus VBA, ohne den Kluges nur einen Zellwert zu ändern?
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