2016-04-24 8 views
2

Ich habe ein Skript geschrieben, das Excel-Berichte erstellt. Diese Berichte können Pivot-Tabellen enthalten. Um eine Pivot-Tabelle beim Laden zu aktualisieren, habe ich refreshOnLoad="1" Parameter zu pivotCacheDefinition1.xml Datei hinzugefügt. Es funktioniert gut mit nur einer kleinen Sache, die ich nicht mag - wenn ich einen Bericht öffne, fragt Excel mich "Wollen Sie den Inhalt der Zielzellen ersetzen"? Ich drücke "ok" und es aktualisiert Pivot-Tabellen. Ich mag dieses Pop-up-Fenster mit dieser Frage nicht, und ich denke, es ist offensichtlich, dass, wenn refreshOnLoad="1" angegeben wird, Inhalt sollte immer aktualisiert werden. Also, meine Frage ist, wie man dieses Fenster unterdrücken kann.Excel-Pivot-Tabellen programmgesteuert erstellen

EDIT

Nach this thread:

Wenn Excel feststellen, dass die Aktualisierung der es den Inhalt einer bestehenden Zelle ersetzen, wird es you.It warnen ist wichtiges Merkmal.

Also bedeutet es, dass Excel immer warnt, wenn es sieht, dass Pivot-Tabelleninhalte aktualisiert werden sollten?

EDIT

Es scheint, wie mein Problem zu this ähnlich ist. Ich verwende jedoch keine VB-Makros, sondern meine Berichte mit einer anderen Programmiersprache (die programmatisch die xlsx-Datei entpackt und sich mit all diesen XML-Dateien beschäftigt).

EDIT

Nun habe ich versucht, sowohl Application.AlertBeforeOverwriting = False und Application.DisplayAlerts = False, aber keiner von ihnen arbeitet.

Antwort

1

Ich konnte das Problem nicht reproduzieren, also sind dies mehr Vorschläge als Antworten.

Ich denke, dass die Befehle, die Sie versuchen, zu spät auftreten - Excel muss wissen, "nicht vor dem Überschreiben zu warnen", bevor es versucht, zu aktualisieren. Wenn es beim Öffnen aktualisiert wird, dann legen Sie die Eigenschaft fest, und Sie haben die falsche Reihenfolge der Ereignisse.

Versuchen:

  1. NICHT refreshOnLoad="1" in der Datei setzen Sie.
  2. Fügen Sie der Arbeitsmappe die VBA-Routine Workbook_Open() hinzu.
  3. Legen Sie in der VBA-Routine die Eigenschaft Application.AlertBeforeOverwriting = False fest, und rufen Sie dann die Methode PivotTable.Refresh auf.

Dies sollte alle "Folge von Ereignissen" Probleme lösen.

+0

Ich wünschte nur, ich könnte refreshOnLoad = 1 und noch "Reihenfolge der Ereignisse" auflösen. Ich mag einfach nicht die Idee, sich stark auf VBA-Routinen zu verlassen – Jacobian