Wie kann ich die Warnung "Links aktualisieren" unterdrücken?

109

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 Updatefü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 updatedNachricht nicht gesehen , weil ich DisplayAlertsauf 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.

Siegel
quelle
1
Aus der Diskussion mit @SiddharthRout geht hervor, dass die Ursache unterschiedliche Einstellungen für verschiedene Excel-Versionen sind: Höchstwahrscheinlich verwenden Sie Excel 2010 oder höher (Siddharth Rout hat auch 2010), während ich 2007 verwende und bei Warnungen überhaupt keine Warnungen sehe Ist ok. Wir werden weitere Untersuchungen durchführen und mit der funktionierenden Lösung zurückkehren - ich hoffe es.) Versuchen Sie nun die Antwort von Siddharth Rout.
Peter L.
2
Meine Gegenstimme für einen sehr interessanten Fall!
Peter L.
@ PeterL. Da Sie die Update-Links auch dann nicht erhalten, wenn Sie die Datei manuell öffnen, gibt es vermutlich eine Einstellung, die mir irgendwo fehlt. Lassen Sie es mich in Excel 2007 testen, bevor ich es bestätigen kann. :)
Siddharth Rout
Können Sie ein Beispiel einer Problemdatei veröffentlichen? Es wäre gut, die Art der Links zu sehen
brettdj
@brettdj, es ist proprietär, daher kann ich keine ganze Datei posten. Ich werde die Links untersuchen, damit ich sehen kann, ob es ein Problem mit ihnen gibt.
Siegel

Antworten:

139

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 is 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 :

Bitten Sie darum, die automatischen Links zu aktualisieren

  • 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):

Externer Inhalt

Voraussetzungen

Ich habe C:\eine Arbeitsmappe genau gemäß den @Siddharth RoutVorschlä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

Diese Arbeitsmappe enthält Links zu anderen Datenquellen

Nach dem Klicken auf habe Updateich voraussichtlich eine andere bekommen:

WARNUNG # 2

Diese Arbeitsmappe enthält einen oder mehrere Links, die nicht aktualisiert werden können

Also, ich nehme an, meine Testumgebung ist jetzt ziemlich ähnlich zu OP's) Soweit so gut, gehen wir endlich zu

VBA-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

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"

Kein Wunder - dies erzeugt BEIDE Warnungen, wie beim manuellen Öffnen oben.

2. Application.DisplayAlerts = False

Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True

Dieser Code endet mit WARNING # 1 , und jede der angeklickten Optionen ( Update/ Don't Update) erzeugt KEINE weiteren Warnungen, dh Application.DisplayAlerts = Falseunterdrückt WARNING # 2 .

3. Application.AskToUpdateLinks = False

Application.AskToUpdateLinks = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.AskToUpdateLinks = True

Im Gegensatz dazu DisplayAlertsendet dieser Code nur mit WARNING # 2 , dh er Application.AskToUpdateLinks = Falseunterdrückt WARNING # 1 .

4. Double False

Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True

Anscheinend führt dieser Code dazu, dass BEIDE WARNHINWEISE unterdrückt werden .

5. UpdateLinks: = False

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=False

Schließlich @brettdjfunktioniert 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:

  1. Excel-Optionen sind unabhängig von der Version von Bedeutung - insbesondere bei VBA-Lösungen.
  2. Jedes Problem hat eine kurze und elegante Lösung - zusammen mit einer nicht offensichtlichen und komplizierten. Nur noch ein Beweis dafür!)

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 InputFolderfolgenden Kategorien angegeben wurden :

Sub WorkbookOpening2007()

Dim InputFolder As String
Dim LoopFileNameExt As String

InputFolder = "D:\DOCUMENTS\" 'Trailing "\" is required!

LoopFileNameExt = Dir(InputFolder & "*.xls?")
Do While LoopFileNameExt <> ""

Application.DisplayAlerts = False
Application.Workbooks.Open (InputFolder & LoopFileNameExt)
Application.DisplayAlerts = True

LoopFileNameExt = Dir
Loop

End Sub

Ich habe es mit Büchern mit nicht verfügbaren externen Links versucht - keine Warnungen.

Beispieldatei: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm

Peter L.
quelle
6
Application.DisplayAlerts = Falsewird diese Warnungen nicht deaktivieren :)
Siddharth Rout
@SiddharthRout Sid Ich schwöre, ich sehe sie nicht: Ich habe eine Datei mit solchen Links und sehe die Warnung, während ich sie manuell öffne. Mit dem obigen Skript - keine Warnungen) Kann Video für Sie teilen))) Excel 2007 - nur für den Fall.
Peter L.
Ok, versuche das :) Öffne zwei neue Arbeitsmappen. Speichern Sie sie als book1.xlsx und book2.xlsx. Geben Sie in Zelle A1 von Buch1 "=" ein und zeigen Sie auf Zelle A1 von Buch2. Geben Sie etwas in Zelle A1 von Buch2 ein, wenn Sie möchten, und schließen Sie dann beide Arbeitsmappen. Öffnen Sie jetzt book1 mit Ihrem Code und Sie werden sehen, dass Sie immer noch die Eingabeaufforderung erhalten :)
Siddharth Rout
Überprüfen Sie auch, bevor Sie die obige Übung ausführen, das Sofortfenster ?Application.AskToUpdateLinks. Ist es bereits auf falsch gesetzt oder ist es wahr ...
Siddharth Rout
2
+1 bis brettdj. Ihre Kunden müssen glücklich sein, wenn alle Ihre Berichte ähnlich sind)
Ksenia
22

Öffnen Sie den VBA-Editor von Excel und geben Sie diesen in das Direktfenster ein (siehe Screenshot).

Application.AskToUpdateLinks = False 

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 :

Geben Sie hier die Bildbeschreibung ein

BEARBEITEN

Wenn Sie es also auf Ihren Code anwenden, sieht Ihr Code so aus

Function getWorkbook(bkPath As String) As Workbook
    Application.AskToUpdateLinks = False
    Set getWorkbook = Workbooks.Open(bkPath, False)
    Application.AskToUpdateLinks = True
End Function

NACHVERFOLGEN

Sigil, Der folgende Code funktioniert auch bei Dateien mit defekten Links. Hier ist mein Testcode.

Test-Bedingungen

  1. Erstellen Sie 2 neue Dateien. Bezeichnen Sie sie Sample1.xlsxund Sample2.xlsxund speichern Sie sie aufC:\
  2. Geben Sie in die Zelle A1von Sample1.xlsxdiese Formel ein='C:\[Sample2.xlsx]Sheet1'!$A$1
  3. Speichern und schließen Sie beide Dateien
  4. Sample2.xlsx löschen !!!
  5. Öffnen Sie eine neue Arbeitsmappe, und das Modul fügt diesen Code ein und führt ihn aus Sample. Sie werden feststellen, dass Sie keine Eingabeaufforderung erhalten.

Code

Option Explicit

Sub Sample()
    getWorkbook "c:\Sample1.xlsx"
End Sub

Function getWorkbook(bkPath As String) As Workbook
    Application.AskToUpdateLinks = False
    Set getWorkbook = Workbooks.Open(bkPath, False)
    Application.AskToUpdateLinks = True
End Function
Siddharth Rout
quelle
3
Dieser Code funktionierte für mich Sid ( in xl2010 ), indem er die Nachricht deaktivierte, aber den Link im Hintergrund aktualisierte. Wenn Sie "GetWorkbook = Workbooks.Open (bkPath, False)" verwenden, wird die Warnung unterdrückt und das Update nicht ausgeführt. Zum Testen von xl03 und xl10
brettdj
1
Danke Dave. :) Übrigens, ich denke du meintest xl03 und xl2007: P Außerdem habe ich den obigen Beitrag bearbeitet, um deinen Vorschlag widerzuspiegeln.
Siddharth Rout
1
@brettdj vielen dank! Wir haben an diesem Morgen eine gute Stunde mit Sid verbracht, um den Fall herauszufinden. Wird der obige Code alle Warnungen für eine Excel-Version unterdrücken und Links stillschweigend aktualisieren ? Und wie soll ich den Code ändern, um ein Update zu vermeiden? Entschuldigung, ich bin ein bisschen in Optionen verloren, aber ich hoffe, ich habe alles richtig erklärt)
Peter L.
@brettdj und was wird sein, wenn Application.DisplayAlerts = Falsees auch hinzugefügt wird?
Peter L.
1
@sigil: Ohne deine Arbeitsmappe zu sehen, kann ich keine weiteren Kommentare abgeben. Ich habe meinen Code unter verschiedenen Bedingungen getestet und er funktioniert einwandfrei. Tatsächlich ist es der richtige Weg, diese Warnungen zu unterdrücken ...
Siddharth Rout
6

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.

user2060451
quelle
3
Dies ist die beste Lösung. Dies betrifft nur die Arbeitsmappe, für die diese Auswahl getroffen wird, und erfordert keine VBA.
Gaia
5

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 = Falseals erste Zeile in mein Auto_Open()Makro aufzunehmen, aber das hat nicht funktioniert. Ich habe jedoch festgestellt, dass es hervorragend Workbook_Open()funktioniert , wenn Sie es stattdessen in die Funktion im ThisWorkbookModul einfügen - der Dialog wird unterdrückt, aber die Aktualisierung erfolgt weiterhin im Hintergrund.

 Private Sub Workbook_Open()
    ' Suppress dialog & update automatically without asking
    Application.AskToUpdateLinks = False
End Sub
Renwick Wright
quelle
Gute Idee; Leider musste ich für dieses Projekt eine Reihe von Arbeitsmappen öffnen, deren Inhalt ich nicht ändern konnte. Es gibt also keine Möglichkeit, das Workbook_Open()Ereignis für jede der Arbeitsmappen in meinem Zielsatz festzulegen.
Siegel
3

(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

Donaldo Almazan
quelle
2

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:

while 1
if winexists("Microsoft Excel","This workbook contains links to other data sources.") Then
   controlclick("Microsoft Excel","This workbook contains links to other data sources.",2)
EndIf
WEnd

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.

Siegel
quelle
2

Wir hoffen, einen zusätzlichen Beitrag zur Lösung dieser Frage (oder eines Teils davon) leisten zu können.

Dies funktioniert zum Öffnen einer ExcelDatei von einer anderen. Verwenden Sie für die Änderung in einer Codezeile von Herrn Peter L. Folgendes:

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=3

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 MSDSbezieht es sich auf MS EXCEL 2010und 2013. Ich denke, das MS EXCEL 2016hat auch das abgedeckt.

Ich habe MS EXCEL 2013und habe eine Situation, die ziemlich ähnlich ist wie dieses Thema. Ich habe also eine Datei (nenne sie A) mit Workbook_OpenEreigniscode, die immer an der Eingabeaufforderung für Update-Links hängen bleibt . Ich habe eine andere Datei (nennen Sie es B) mit dieser verbunden, und Pivot-Tabellen zwingen mich, die Datei zu öffnen, Adamit das Datenmodell geladen werden kann. Da ich die ADatei still im Hintergrund öffnen möchte , verwende ich nur die oben geschriebene Zeile mit a Windows("A.xlsx").visible = falseund öffne die ADatei , abgesehen von einer größeren Ladezeit, Bohne Probleme oder Warnungen aus der Datei und werde vollständig aktualisiert .

JDF
quelle