AKTUALIZACJA:
Po podsumowaniu i omówieniu wszystkich szczegółów, spędziłem 2 godziwe godziny na sprawdzaniu opcji, a ta aktualizacja ma dotknąć wszystkich i
.
Przygotowania
Przede wszystkim wykonałem czystą instalację pakietu Office 2010 x86 na maszynie wirtualnej Clean Win7 SP1 Ultimate x64 obsługiwanej przez VMWare (jest to normalna procedura dla moich codziennych zadań testowych, więc mam ich wiele wdrożonych).
Następnie zmieniłem tylko następujące opcje programu Excel (tj. Wszystkie pozostałe pozostają bez zmian po instalacji):
Advanced > General > Ask to update automatic links
sprawdzone :
Trust Center > Trust Center Settings... > External Content > Enable All...
(chociaż ten, który odnosi się do połączeń danych, najprawdopodobniej nie jest ważny w tym przypadku):
Warunki wstępne
Przygotowałem i umieściłem C:\
w skoroszycie dokładnie zgodnie z @Siddharth Rout
sugestiami zawartymi w jego zaktualizowanej odpowiedzi (udostępnionej dla Twojej wygody): https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx Powiązana książka została następnie usunięta , aby link w udostępnionym książka jest niedostępna (na pewno).
Otwieranie ręczne
Powyższy udostępniony plik pokazuje przy otwieraniu (mając wyżej wymienione opcje programu Excel) 2 ostrzeżenia - w kolejności ich występowania:
OSTRZEŻENIE # 1
Po kliknięciu Update
spodziewałem się kolejnego:
OSTRZEŻENIE 2
Tak więc, przypuszczam, że moje środowisko testowe jest teraz bardzo podobne do OP
). Jak dotąd dobrze, w końcu przechodzimy do
Otwarcie VBA
Teraz spróbuję krok po kroku wszystkich możliwych opcji, aby obraz był jasny. Dla uproszczenia udostępnię tylko odpowiednie wiersze kodu (kompletny przykładowy plik z kodem zostanie udostępniony na końcu).
1. Prosta aplikacja.Workbooks.Open
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Nic dziwnego - to generuje OBA ostrzeżenia, jak przy ręcznym otwieraniu powyżej.
2. Application.DisplayAlerts = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
Ten kod kończy się OSTRZEŻENIEM # 1 i każda kliknięta opcja ( Update
/ Don't Update
) NIE generuje żadnych dalszych ostrzeżeń, tj. Application.DisplayAlerts = False
Pomija OSTRZEŻENIE # 2 .
3. Application.AskToUpdateLinks = False
Application.AskToUpdateLinks = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.AskToUpdateLinks = True
W przeciwieństwie do DisplayAlerts
tego kod kończy się tylko OSTRZEŻENIEM # 2 , tj. Application.AskToUpdateLinks = False
Pomija OSTRZEŻENIE # 1 .
4. Podwójne fałsz
Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True
Najwyraźniej ten kod kończy się pomijaniem OBU OSTRZEŻEŃ .
5. UpdateLinks: = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=False
Wreszcie, to 1-liniowe rozwiązanie (pierwotnie zaproponowane przez @brettdj
) działa tak samo jak Double False: NIE są wyświetlane OSTRZEŻENIA !
Wnioski
Oprócz dobrej praktyki testowania i bardzo ważnego rozwiązanego przypadku (mogę napotykać takie problemy codziennie podczas wysyłania moich skoroszytów do innej firmy, a teraz jestem przygotowany), dowiedziałem się jeszcze 2 rzeczy:
- Opcje programu Excel MAJĄ znaczenie, niezależnie od wersji - zwłaszcza jeśli chodzi o rozwiązania VBA.
- Każdy problem ma krótkie i eleganckie rozwiązanie - razem z nieoczywistym i skomplikowanym. Jeszcze tylko jeden dowód!)
Bardzo dziękuję wszystkim, którzy przyczynili się do rozwiązania, a zwłaszcza OP, który zadał pytanie. Mam nadzieję, że moje badania i dokładnie opisane kroki testowe były pomocne nie tylko dla mnie)
Przykładowy plik z powyższymi przykładami kodu jest udostępniany (wiele linii jest celowo komentowanych): https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
Oryginalna odpowiedź (testowana pod kątem programu Excel 2007 z pewnymi opcjami):
Ten kod działa dobrze dla mnie - przechodzi przez WSZYSTKIE pliki Excela określone za pomocą symboli wieloznacznych w InputFolder
:
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
Wypróbowałem to z książkami z niedostępnymi linkami zewnętrznymi - bez ostrzeżeń.
Przykładowy plik: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm