it-swarm.com.de

Wie kann ich die Update-Link-Warnung unterdrücken?

Ich versuche, ein Skript zu schreiben, das viele Excel-Dateien öffnet. Ich bekomme immer die Aufforderung:

This workbook contains links to other data sources.

Ich möchte, dass diese Nachricht nicht angezeigt wird, so dass mein Skript automatisch alle Arbeitsmappen durchgehen kann, ohne dass ich für jeden auf Don't Update 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 Nachricht wird jedoch weiterhin angezeigt. Wie kann ich es unterdrücken?

BEARBEITEN: Es scheint, dass diese Nachricht für Arbeitsmappen erscheint, die Links unterbrochen haben. Ich habe die This workbook contains one or more links that cannot be updated-Nachricht nicht angezeigt, weil ich DisplayAlerts auf false gesetzt habe. Die Arbeitsmappen sind mit entsprechenden Dateien in einem Ordner auf unserem Windows-Server verknüpft. Wenn die entsprechende Datei aus diesem Ordner gelöscht wird (was im Rahmen unseres Geschäftsflusses geschieht), bricht der Link. Kann die Warnung unterdrückt werden, wenn die Verbindung unterbrochen wird?

Außerdem verwende ich Excel 2010.

89
sigil

Ich habe eine temporäre Lösung gefunden, mit der ich diesen Job zumindest bearbeiten kann. Ich habe ein kurzes AutoIt-Skript geschrieben, das darauf wartet, dass das Fenster "Update-Links" angezeigt wird, und dann auf die Schaltfläche "Nicht aktualisieren" klickt. 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 das zu funktionieren. Ich würde wirklich gerne eine Lösung finden, die ausschließlich VBA ist, damit ich diese eigenständige Anwendung erstellen kann.

2
sigil

UPDATE:

Nachdem alle Details zusammengefasst und besprochen worden waren, habe ich zwei gute Stunden damit verbracht, die Optionen zu überprüfen, und dieses Update enthält alle is.

Vorbereitungen

Zunächst führte ich eine saubere Installation von Office 2010 x86 auf der von VMWare betriebenen virtuellen Maschine mit Clean Win7 SP1 Ultimate x64 durch (dies ist eine übliche Routine für meine täglichen Testaufgaben, daher habe ich viele davon bereitgestellt).

Dann habe ich nur die folgenden Excel-Optionen geändert (d. H. Alle anderen Optionen bleiben nach der Installation erhalten):

  • Advanced > General > Ask to update automatic linkschecked:

Ask to update automatic links

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

External Content

Voraussetzungen

Ich habe eine Arbeitsmappe nach C:\-Vorschlägen in ihrer aktualisierten Antwort (die für Ihre Bequemlichkeit zur Verfügung gestellt wurde) erstellt und @Siddharth Rout gestellt: https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx Das verknüpfte Buch war dann delete, so dass der Link in der freigegebenen Mappe (sicher) nicht verfügbar ist.

Manuelles Öffnen

Die oben genannte freigegebene Datei zeigt beim Öffnen (mit den oben aufgeführten Excel-Optionen) 2 Warnungen an - in der Reihenfolge des Erscheinens:

WARNUNG # 1

This workbook contains links to other data sources

Nachdem ich auf Update geklickt habe, bekam ich erwartungsgemäß einen weiteren:

WARNUNG # 2

This workbook contains one or more links that cannot be updated

Ich denke also, meine Testumgebung ist __variable (OPs) ziemlich ähnlich. So weit, so gut, gehen wir endlich weiter

VBA-Eröffnung

Jetzt versuche ich Schritt für Schritt alle möglichen Optionen, um das Bild klarer zu machen. Ich werde zur Vereinfachung nur relevante Codezeilen freigeben (vollständige Beispieldatei mit Code wird am Ende freigegeben).

1. Simple Application.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 eine Option (UpdateDon't Update), die angeklickt wird, erzeugt KEINE weiteren Warnungen, d. H. Application.DisplayAlerts = False unterdrückt _/WARNING # 2.

3. Application.AskToUpdateLinks = False

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

Im Gegensatz zu DisplayAlerts endet dieser Code nur mit WARNING # 2, d. H. Application.AskToUpdateLinks = False unterdrückt WARNING # 1.

4. Doppelt falsch

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

Anscheinend endet dieser Code mit der Unterdrückung von BEIDE WARNUNGEN.

5. UpdateLinks: = False

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

Schließlich funktioniert diese 1-Zeilen-Lösung (ursprünglich von @brettdj vorgeschlagen) auf dieselbe Weise wie Double False: NO WARNINGS werden angezeigt!

Schlussfolgerungen

Abgesehen von einer guten Testpraxis und einem sehr wichtigen gelösten Fall (Ich kann mich jeden Tag mit solchen Problemen beschäftigen, wenn ich meine Arbeitsmappen an Dritte schicke, und jetzt bin ich vorbereitet), 2 weitere Dinge gelernt:

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

Vielen Dank an alle, die zur Lösung beigetragen haben, insbesondere OP, die die Frage gestellt haben. Hoffe, meine Untersuchungen und ausführlich beschriebenen Testschritte waren nicht nur für mich hilfreich.)

Beispieldatei mit den obigen Codebeispielen wird gemeinsam genutzt (viele Zeilen werden absichtlich kommentiert): https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm

Originalantwort (getestet mit Excel 2007 mit bestimmten Optionen):

Dieser Code funktioniert gut für mich - er durchläuft ALLE Excel-Dateien, die mithilfe von Platzhaltern in der Variablen InputFolder 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

115
Peter L.

Ö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. Es wird Sie nicht erneut auffordern. Denken Sie daran, es zurückzusetzen, wenn Sie die Arbeitsmappe schließen. Andernfalls funktioniert es nicht für andere Arbeitsmappen.

Bildschirmfoto :

enter image description here

EDIT

Wenn Sie ihn also auf Ihren Code anwenden, wird Ihr Code so aussehen

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 für Dateien mit fehlerhaften Links. Hier ist mein Testcode.

Test-Bedingungen

  1. Erstellen Sie 2 neue Dateien. Benennen Sie sie Sample1.xlsx und Sample2.xlsx und speichern Sie sie unter C:\.
  2. Geben Sie in der Zelle A1 von Sample1.xlsx diese Formel ='C:\[Sample2.xlsx]Sheet1'!$A$1 ein.
  3. Speichern Sie und schließen Sie beide Dateien
  4. Löschen Sie Sample2.xlsx !!!
  5. Öffnen Sie eine neue Arbeitsmappe. Das Modul fügt diesen Code ein und führt Sample aus. Sie werden feststellen, dass Sie keine Aufforderung 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
18
Siddharth Rout

Excel 2016 Ich hatte ein ähnliches Problem, als ich eine Arbeitsmappe/Datei erstellte, und dann änderte ich die Namen, aber irgendwie wurde der alte Arbeitsmappenname beibehalten ... __ letzte Antwort dort ...

Gehen Sie zu DATA -> Edit Link -> Startup Prompt (unten). Wählen Sie dann die für Sie beste Option.

4
user2060451

Ich wollte die Eingabeaufforderung unterdrücken, in der Sie gefragt werden, ob Sie Verknüpfungen zu einer anderen Arbeitsmappe aktualisieren möchten, wenn meine Arbeitsmappe manuell in Excel geöffnet wird (anstatt sie programmgesteuert über VBA zu öffnen). Ich habe versucht, Folgendes hinzuzufügen: Application.AskToUpdateLinks = False als erste Zeile in meinem Auto_Open()-Makro, aber das hat nicht funktioniert. Ich entdeckte jedoch, dass, wenn Sie es stattdessen in die Workbook_Open()-Funktion im ThisWorkbook-Modul einfügen, es hervorragend funktioniert - der Dialog wird unterdrückt, das Update wird jedoch immer noch im Hintergrund ausgeführt. 

 Private Sub Workbook_Open()
    ' Suppress dialog & update automatically without asking
    Application.AskToUpdateLinks = False
End Sub
4
Renwick Wright

(Ich habe nicht genug Punkte, um einen Kommentar hinzuzufügen, aber ich möchte den Antworten hier etwas Klarheit verleihen.)

Application.AskToUpdateLinks = False ist wahrscheinlich nicht das, was Sie wollen.

Wenn der Wert auf False gesetzt ist, versucht MS Excel wird, die Verknüpfungen automatisch zu aktualisieren.

Die richtige Lösung, wenn Sie eine Datei öffnen möchten ohne, die Verknüpfungen zum Aktualisieren, sollte folgendermaßen lauten:

Workbook.Open (UpdateLinks: = 0)

Zugehöriger Link: Unterschied in AskToUpdateLinks = False und UpdateLinks: = 0

0
Donaldo Almazan

Hoffen Sie, etwas zusätzlichen Beitrag zur Lösung dieser Frage (oder eines Teils davon) zu leisten.

Dies funktioniert zum Öffnen einer Excel-Datei von einer anderen. Eine Codezeile von Mr. Peter L. verwendet zur Änderung Folgendes:

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

Dies ist in MSDS. Der Effekt ist, dass einfach alles (ja, alles) ohne Warnung aktualisiert wird. Dies kann auch überprüft werden, wenn Sie ein Makro aufzeichnen.

In MSDS verweist es auf MS Excel 2010 und 2013. Ich denke, dass MS Excel 2016 auch dies abdeckt. 

Ich habe MS Excel 2013 und habe eine ähnliche Situation wie dieses Thema. Ich habe also eine Datei (nennen Sie es A) mit Workbook_Open Ereigniscode, die immer auf der update links Prompt hängen bleibt. Ich habe eine andere Datei (nennen Sie es B), die mit dieser verbunden ist, und Pivot Tables zwinge mich, die Datei A zu öffnen, damit das Datenmodell geladen werden kann. Da ich die A-Datei unbemerkt im Hintergrund öffnen möchte, verwende ich einfach die oben geschriebene Zeile mit einer Windows("A.xlsx").visible = false und öffne, abgesehen von einer längeren Ladezeit, die A-Datei aus der B-Datei ohne Probleme oder Warnungen und vollständig aktualisiert.

0
JDF