Ich versuche ein Skript zu schreiben, das viele Excel-Dateien öffnet. Ich bekomme immer wieder die Aufforderung:
This workbook contains links to other data sources.
Ich möchte verhindern, dass diese Meldung angezeigt wird, damit mein Skript automatisch alle Arbeitsmappen durchgehen kann, ohne dass ich Don't Update
für jede einzelne klicken muss. Derzeit verwende ich Folgendes:
function getWorkbook(bkPath as string) as workbook
Application.EnableEvents=False
Application.DisplayAlerts=False
getWorkbook=Workbooks.Open(bkPath,updatelinks:=0,readonly:=false)
end function
Die Meldung wird jedoch weiterhin angezeigt. Wie kann ich es unterdrücken?
BEARBEITEN: Es scheint, dass diese Meldung für Arbeitsmappen mit defekten Links angezeigt wird. Ich habe die This workbook contains one or more links that cannot be updated
Nachricht nicht gesehen , weil ich DisplayAlerts
auf false gesetzt hatte. Die Arbeitsmappen sind mit entsprechenden Dateien in einem Ordner auf unserem Windows-Server verknüpft. Wenn also die übereinstimmende Datei aus diesem Ordner gelöscht wird (was Teil unseres Geschäftsablaufs ist), wird die Verknüpfung unterbrochen. Ist es möglich, die Warnung zu unterdrücken, wenn die Verbindung unterbrochen wird?
Außerdem verwende ich Excel 2010.
Antworten:
AKTUALISIEREN:
Nachdem alle Details zusammengefasst und diskutiert wurden, habe ich 2 faire Stunden damit verbracht, die Optionen zu überprüfen, und dieses Update soll alle
i
s aufzeichnen.Vorbereitungen
Zunächst führte ich eine saubere Office 2010 x86-Installation auf einer virtuellen VM mit Clean Win7 SP1 Ultimate x64 durch, die von VMWare unterstützt wird (dies ist die übliche Routine für meine täglichen Testaufgaben, daher habe ich viele davon bereitgestellt).
Dann habe ich nur die folgenden Excel-Optionen geändert (dh alle anderen bleiben unverändert nach der Installation):
Advanced > General > Ask to update automatic links
geprüft :Trust Center > Trust Center Settings... > External Content > Enable All...
(obwohl derjenige, der sich auf Datenverbindungen bezieht, für den Fall höchstwahrscheinlich nicht wichtig ist):Voraussetzungen
Ich habe
C:\
eine Arbeitsmappe genau gemäß den@Siddharth Rout
Vorschlägen in seiner aktualisierten Antwort vorbereitet und platziert (zur Vereinfachung freigegeben): https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx Das verknüpfte Buch wurde dann gelöscht, sodass der Link in der freigegebenen Antwort gelöscht wurde Buch ist nicht verfügbar (sicher).Manuelles Öffnen
Die oben genannte freigegebene Datei zeigt beim Öffnen (mit den oben aufgeführten Excel-Optionen) 2 Warnungen - in der Reihenfolge ihres Auftretens:
WARNUNG # 1
Nach dem Klicken auf habe
Update
ich voraussichtlich eine andere bekommen:WARNUNG # 2
Also, ich nehme an, meine Testumgebung ist jetzt ziemlich ähnlich zu
OP
's) Soweit so gut, gehen wir endlich zuVBA-Eröffnung
Jetzt werde ich Schritt für Schritt alle möglichen Optionen ausprobieren, um das Bild klar zu machen. Der Einfachheit halber werde ich nur relevante Codezeilen freigeben (die vollständige Beispieldatei mit Code wird am Ende freigegeben).
1. Einfache Anwendung.Workbooks.Open
Kein Wunder - dies erzeugt BEIDE Warnungen, wie beim manuellen Öffnen oben.
2. Application.DisplayAlerts = False
Dieser Code endet mit WARNING # 1 , und jede der angeklickten Optionen (
Update
/Don't Update
) erzeugt KEINE weiteren Warnungen, dhApplication.DisplayAlerts = False
unterdrückt WARNING # 2 .3. Application.AskToUpdateLinks = False
Im Gegensatz dazu
DisplayAlerts
endet dieser Code nur mit WARNING # 2 , dh erApplication.AskToUpdateLinks = False
unterdrückt WARNING # 1 .4. Double False
Anscheinend führt dieser Code dazu, dass BEIDE WARNHINWEISE unterdrückt werden .
5. UpdateLinks: = False
Schließlich
@brettdj
funktioniert diese 1-Zeilen-Lösung (ursprünglich vorgeschlagen von ) genauso wie Double False: KEINE WARNHINWEISE werden angezeigt!Schlussfolgerungen
Abgesehen von einer guten Testpraxis und einem sehr wichtigen gelösten Fall (ich kann jeden Tag auf solche Probleme stoßen, wenn ich meine Arbeitsmappen an Dritte sende, und jetzt bin ich vorbereitet), haben 2 weitere Dinge gelernt:
Vielen Dank an alle, die zur Lösung beigetragen haben, und insbesondere an OP, die die Frage aufgeworfen haben. Ich hoffe, meine Untersuchungen und gründlich beschriebenen Testschritte waren nicht nur für mich hilfreich.
Die Beispieldatei mit den obigen Codebeispielen wird freigegeben (viele Zeilen werden absichtlich kommentiert): https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
Ursprüngliche Antwort (getestet für Excel 2007 mit bestimmten Optionen):
Dieser Code funktioniert gut für mich - er durchläuft ALLE Excel-Dateien, die mit Platzhaltern in den
InputFolder
folgenden Kategorien angegeben wurden :Ich habe es mit Büchern mit nicht verfügbaren externen Links versucht - keine Warnungen.
Beispieldatei: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
quelle
Application.DisplayAlerts = False
wird diese Warnungen nicht deaktivieren :)?Application.AskToUpdateLinks
. Ist es bereits auf falsch gesetzt oder ist es wahr ...Öffnen Sie den VBA-Editor von Excel und geben Sie diesen in das Direktfenster ein (siehe Screenshot).
Schließen Sie Excel und öffnen Sie Ihre Datei. Sie werden nicht erneut dazu aufgefordert. Denken Sie daran, es zurückzusetzen, wenn Sie die Arbeitsmappe schließen. Andernfalls funktioniert es auch nicht für andere Arbeitsmappen.
Screenshot :
BEARBEITEN
Wenn Sie es also auf Ihren Code anwenden, sieht Ihr Code so aus
NACHVERFOLGEN
Sigil, Der folgende Code funktioniert auch bei Dateien mit defekten Links. Hier ist mein Testcode.
Test-Bedingungen
Sample1.xlsx
undSample2.xlsx
und speichern Sie sie aufC:\
A1
vonSample1.xlsx
diese Formel ein='C:\[Sample2.xlsx]Sheet1'!$A$1
Sample
. Sie werden feststellen, dass Sie keine Eingabeaufforderung erhalten.Code
quelle
Application.DisplayAlerts = False
es auch hinzugefügt wird?Excel 2016 Ich hatte ein ähnliches Problem, als ich eine Arbeitsmappe / Datei erstellte und dann die Namen änderte, aber irgendwie wurde der alte Arbeitsmappenname beibehalten. Nach vielem googeln ... nun, habe dort keine endgültige Antwort gefunden ...
Gehen Sie zu DATA -> Link bearbeiten -> Startaufforderung (unten) und wählen Sie dann die beste Option für Sie.
quelle
Ich wollte die Eingabeaufforderung unterdrücken, die Sie fragt, ob Sie Links zu einer anderen Arbeitsmappe aktualisieren möchten, wenn meine Arbeitsmappe manuell in Excel geöffnet wird (im Gegensatz zum programmgesteuerten Öffnen über VBA). Ich habe versucht, Folgendes
Application.AskToUpdateLinks = False
als erste Zeile in meinAuto_Open()
Makro aufzunehmen, aber das hat nicht funktioniert. Ich habe jedoch festgestellt, dass es hervorragendWorkbook_Open()
funktioniert , wenn Sie es stattdessen in die Funktion imThisWorkbook
Modul einfügen - der Dialog wird unterdrückt, aber die Aktualisierung erfolgt weiterhin im Hintergrund.quelle
Workbook_Open()
Ereignis für jede der Arbeitsmappen in meinem Zielsatz festzulegen.(Ich habe nicht genügend Wiederholungspunkte, um einen Kommentar hinzuzufügen, aber ich möchte die Antworten hier etwas klarer gestalten.)
Application.AskToUpdateLinks = False ist wahrscheinlich nicht das, was Sie wollen.
Wenn auf false gesetzt, dann MS Excel wird versuchen , die Verknüpfungen zu aktualisieren automatisch , es wird einfach nicht prompt der Benutzer vorher, sorta kontraintuitiv.
Die richtige Lösung, wenn Sie eine Datei öffnen möchten, ohne die Links zu aktualisieren, sollte sein:
Workbook.Open (UpdateLinks: = 0)
Zugehöriger Link: Unterschied in AskToUpdateLinks = False und UpdateLinks: = 0
quelle
Ich habe eine vorübergehende Lösung gefunden, mit der ich diesen Job zumindest bearbeiten kann. Ich habe ein kurzes AutoIt-Skript geschrieben, das darauf wartet, dass das Fenster "Links aktualisieren" angezeigt wird, und dann auf die Schaltfläche "Nicht aktualisieren" klickt. Der Code lautet wie folgt:
Bisher scheint dies zu funktionieren. Ich würde wirklich gerne eine Lösung finden, die vollständig VBA ist, damit ich dies zu einer eigenständigen Anwendung machen kann.
quelle
Wir hoffen, einen zusätzlichen Beitrag zur Lösung dieser Frage (oder eines Teils davon) leisten zu können.
Dies funktioniert zum Öffnen einer
Excel
Datei von einer anderen. Verwenden Sie für die Änderung in einer Codezeile von Herrn Peter L. Folgendes:Das ist in
MSDS
. Der Effekt ist, dass nur alles (ja, alles) ohne Warnung aktualisiert wird. Dies kann auch überprüft werden, wenn Sie ein Makro aufzeichnen.In
MSDS
bezieht es sich aufMS EXCEL 2010
und2013
. Ich denke, dasMS EXCEL 2016
hat auch das abgedeckt.Ich habe
MS EXCEL 2013
und habe eine Situation, die ziemlich ähnlich ist wie dieses Thema. Ich habe also eine Datei (nenne sieA
) mitWorkbook_Open
Ereigniscode, die immer an der Eingabeaufforderung für Update-Links hängen bleibt . Ich habe eine andere Datei (nennen Sie esB
) mit dieser verbunden, und Pivot-Tabellen zwingen mich, die Datei zu öffnen,A
damit das Datenmodell geladen werden kann. Da ich dieA
Datei still im Hintergrund öffnen möchte , verwende ich nur die oben geschriebene Zeile mit aWindows("A.xlsx").visible = false
und öffne dieA
Datei , abgesehen von einer größeren Ladezeit,B
ohne Probleme oder Warnungen aus der Datei und werde vollständig aktualisiert .quelle