2016-08-10 3 views
1

Ich habe einen Würfel mit Pivots in Excel verbunden. In einer Zelle i zeigen den „letzten Aktualisierung“ Wert durch diese Formel:vba Get Cube Aktualisierungszeit mit Formel Benötigt, Makroausführung zu verzögern

=CUBEVALUE("CUBE NAME";"[Measures].[Last Data Update]") 

Es dauert 5-10 Sekunden für Excel, um die Zeit der Aktualisierung aus dem Cube zu erhalten und die Zelle aktualisieren. Also, wenn ich die Arbeitsmappe direkt danach schließe, wird es einfach n/a sagen, wenn ich die Arbeitsmappe wieder öffne.

Ich habe dieses WB geplant, um (unter anderem wbs) durch ein anderes wb zu automatisieren, das geplant ist, jeden Tag zu laufen. Damit bekomme ich das N/A Problem. Ich sehe zwei Lösungen, von denen ich nicht weiß, wie ich dazu komme:

1, Halten Sie das Makro für 10 Sekunden, damit es das Datum richtig erhalten kann. - Ich habe sowohl Wait als auch Sleep Vba ausprobiert, aber dies unterbricht auch Berechnungen. - Gibt es eine Möglichkeit, das Ausführen des Makros nur zu unterbrechen?

2, Holen Sie sich das Update-Datum von VBA und dann drucken Sie es in eine Zelle. - Ich habe keine Ahnung, wie das geht. Ich habe gesucht, aber keine Alternative gefunden. - Weiß jemand, wie das möglich gemacht werden könnte?

Dank Elias

GELÖST:

Nur meine Lösung teilen möchten. Fand die CalculateUntilAsyncQueriesDone Methode, die OLAP-Datenquellen behandelt:

    Application.CalculateUntilAsyncQueriesDone 

        Do While Application.CalculationState <> xlDone 
         DoEvents 
        Loop 

Mehr Infos hier: https://msdn.microsoft.com/en-us/library/office/ff821008.aspx

+1

Haben Sie versucht, das Hinzufügen 'DoEvents'? Oder sogar "Speichern" der Datei vor dem Schließen? Wenn die Berechnung auf automatisch gesetzt ist, berechnen die Zellen. –

+0

Entschuldigung, dass ich nicht die ganze Geschichte gebe. Ja, ich habe sowohl DoEvents als auch Saving versucht. Ich habe auch versucht Calculate, aber es schließt immer noch zu schnell. Seit dem Cubevalue –

+0

Sorry für die ganze Geschichte nicht geben. Ja, ich habe sowohl DoEvents als auch Saving versucht. Ich habe auch versucht Calculate, aber es schließt immer noch zu schnell. Es sieht so aus, als ob Cubevalue versucht, die Information wiederzuerlangen, nachdem sie berechnet hat. Egal wie lange Wartezeiten, Berechnungen oder Ereignisse ich CubeValue berechnen nicht richtig berechnet. Ich habe jedoch bemerkt, dass wenn ich einen manuellen Haltepunkt in den Code einfüge, er richtig berechnet. Also, wie kann ich das Makro für 10 Sekunden anhalten und habe in der Zwischenzeit die Excel-Funktion normal? –

Antwort

0

Versuchen Sie, diesen Wait Code, den ich vor vielen Jahren geschrieben hat. Dies wird auf bestimmte Sekunden warten und Excel Formel berechnen lassen. Ändern Sie einfach 10 auf die von Ihnen gewünschte Nummer.

Sub Sample() 
    ' 
    '~~~> Rest of your code 
    ' 
    Wait 10 '<~~ Wait for 10 secs 
    ' 
    '~~~> Rest of your code 
    ' 
End Sub 

Private Sub Wait(ByVal nSec As Long) 
    nSec = nSec + Timer 
    While nSec > Timer 
     DoEvents 
    Wend 
End Sub 
+0

Danke! Das hätte funktionieren können. Ich habe es gerade anders gelöst, Code unten! 'Application.CalculateUntilAsyncQueriesDone Während Application.CalculationState <> xlDone DoEvents Loop ' –