2016-04-26 19 views
1

Ich habe das folgende Makro, um meine Arbeitsmappe zu aktualisieren. An diesem Punkt ist dies das gleiche wie beim Klicken auf die Schaltfläche Alle aktualisieren. Gibt es ein Zeitelement, das ich diesem Code hinzufügen kann, um alle Datenverbindungen und alle Berechnungen auf alle Arbeitsblätter in meiner Arbeitsmappe alle 15 Minuten zu aktualisieren.Makro, um eine gesamte Excel-Arbeitsmappe (alle Datenverbindungen und Berechnungen) alle 15 Minuten zu aktualisieren?

Die Arbeitsmappe enthält Zellen, die Daten aus SharePoint-Listenelementen abrufen und typische Formelberechnungen enthalten.

Sub Workbook_RefreshAll() 
ActiveWorkbook.RefreshAll 
End Sub 

Antwort

1

Geben Sie in einem Standardmodul folgendes:

Public RunWhen As Double 
Public Const cRunIntervalMinutes = 15 
Public Const cRunWhat = "Workbook_RefreshAll" 

Sub StartTimer() 
    RunWhen = Now + TimeSerial(0, cRunIntervalMinutes, 0) 
    Application.OnTime earliesttime:=RunWhen, procedure:=cRunWhat, _ 
     schedule:=True 
End Sub 

Sub StopTimer() 
    On Error Resume Next 
    Application.OnTime earliesttime:=RunWhen, _ 
     procedure:=cRunWhat, schedule:=False 
End Sub 

Sub Workbook_RefreshAll() 
    Application.CalculateFullRebuild 
    ActiveWorkbook.RefreshAll 
    Call StartTimer 
End Sub 

den Prozess laufen StartTimer() zu beginnen und den Prozess laufen StopTimer()

von Chip Pearson's Site

habe ich einige Formen Angepasst beenden die Makros ausführen :

enter image description here

+0

Danke Gary. Möchte ich StartTimer() und StopTimer() in ihre eigenen Module einbauen? Dies wäre ein guter Weg zu gehen, vor allem, da ich nur eine Start-und Stop-Taste für die Arbeitsmappe erstellen kann. – user1266515

+0

@ user1266515 Als ich den Code, den ich gerade gepostet habe, getestet habe, habe ich den gesamten Code in ein einzelnes Standardmodul geschrieben und 'StartTimer()' und StopTimer() 'auf einige Shapes im Arbeitsblatt zugewiesen. –

+0

Das ist interessant. Mir war nicht bewusst, dass Funktionen innerhalb eines Moduls über Buttons oder Shapes aufgerufen werden können. Danke nochmal! – user1266515

0

alle Berechnungen aktualisieren können Sie:

application.Calculate 

PS: Sorry, mein Englisch

1

Sie können die Application.OnTime Methode ein Makro planen in der Zukunft ausgeführt werden sollen: https://msdn.microsoft.com/en-us/library/office/ff196165.aspx

Dies ist jedoch nur ein einmaliges Ereignis. Um es rekursiv zu machen, müssen Sie in diesem Makro (noch einmal) einen anderen Application.OnTime einschließen, um einen Anruf "alle 15 Minuten" sicherzustellen.

Verwandte Themen