it-swarm.com.de

Excel zum Aktualisieren von Daten auf einem Blatt aus VBA heraus veranlassen

Wie lassen sich Tabellenkalkulationsdaten in Excel in VBA neu berechnen, ohne dass lediglich ein Zellenwert geändert werden muss?

47
Lance Roberts

Die folgenden Zeilen machen den Trick:

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

Edit: Die Methode .Calculate() funktioniert nicht für alle Funktionen. Ich habe es auf einem Blatt mit Add-In-Array-Funktionen getestet. Das von mir verwendete Produktionsblatt ist so komplex, dass ich die .CalculateFull() -Methode nicht testen möchte, aber es funktioniert möglicherweise.

56
Lance Roberts

Dies sollte den Trick machen ...

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

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

Manchmal macht Excel Probleme und benötigt einen Kick-Start, um eine Gleichung erneut anzuwenden. Dies ist in einigen Fällen der Fall, wenn Sie benutzerdefinierte Formeln verwenden.

Stellen Sie sicher, dass Sie das folgende Skript haben

ActiveSheet.EnableCalculation = True

Wenden Sie die Gleichung Ihrer Wahl erneut an.

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

Dies kann dann nach Bedarf wiederholt werden.

8
kambeeks

Sie könnten es auch versuchen

Application.CalculateFull

oder

Application.CalculateFullRebuild

wenn es Ihnen nichts ausmacht, alle geöffneten Arbeitsmappen und nicht nur das aktive Arbeitsblatt neu zu erstellen. (CalculateFullRebuild baut auch Abhängigkeiten wieder auf.)

6
Dave DuPlantis

Ich hatte ein Problem beim Deaktivieren eines Hintergrundbilds (ein ENTWURF-Wasserzeichen) in VBA. Meine Änderung wurde nicht angezeigt (was mit der Sheets(1).PageSetup.CenterHeader = "" -Methode durchgeführt wurde) - daher brauchte ich eine Möglichkeit zum Aktualisieren. Das ActiveSheet.EnableCalculation Ansatz hat teilweise den Trick gemacht, aber nicht verwendete Zellen nicht abgedeckt.

Am Ende fand ich mit einem Einzeiler, der das Bild verschwinden ließ, wenn es nicht mehr gesetzt war, was ich brauchte:

Application.ScreenUpdating = True

3
AjV Jsy

Nach einer Aktualisierung der Datenverbindung wurden einige UDFs nicht ausgeführt. Unter Verwendung eines Unterprogramms habe ich versucht, eine einzelne Spalte neu zu berechnen mit:

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

Die obige Aussage hatte jedoch keine Wirkung. Keine der oben genannten Lösungen half, außer dem Vorschlag von Kambeeks, Formeln zu ersetzen, funktionierte und war schnell, wenn die manuelle Neuberechnung während der Aktualisierung aktiviert wurde. Der folgende Code löste mein Problem, auch wenn er nicht genau für den Kommentar von OP "kluge" verantwortlich war, und bot eine schnelle/zuverlässige Lösung, um die Neuberechnung von benutzerdefinierten Zellen zu erzwingen.

Application.Calculation = xlManual
DoEvents
For Each mycell In Sheets("mysheet").Range("D9:D750").Cells
    mycell.Formula = mycell.Formula
Next
DoEvents
Application.Calculation = xlAutomatic
0
pghcpa