Güncelleme Bağlantıları uyarısı nasıl engellenir?


110

Birçok Excel dosyasını açan bir komut dosyası yazmaya çalışıyorum. İstemi almaya devam ediyorum:

This workbook contains links to other data sources.

Bu mesajın görünmesini engellemek istiyorum, böylece komut dizim, Don't Updateher birini tıklamama gerek kalmadan tüm çalışma kitaplarını otomatik olarak inceleyebilir . Şu anda aşağıdakileri kullanıyorum:

function getWorkbook(bkPath as string) as workbook

Application.EnableEvents=False
Application.DisplayAlerts=False
getWorkbook=Workbooks.Open(bkPath,updatelinks:=0,readonly:=false)

end function

Ancak, mesaj hala görünüyor. Nasıl bastırabilirim?

DÜZENLE: Görünüşe göre bu ileti, kopuk bağlantıları olan çalışma kitapları için geliyor; Ben görmüyordu This workbook contains one or more links that cannot be updatedben belirlersiniz çünkü mesajı DisplayAlertsYANLıŞ olarak. Çalışma kitapları, Windows sunucumuzdaki bir klasördeki eşdeğer dosyalara bağlanır, bu nedenle eşleşen dosya bu klasörden silindiğinde (bu, iş akışımızın bir parçası olarak gerçekleşir) bağlantı kopar. Bağlantı koptuğunda uyarıyı bastırmak mümkün mü?

Ayrıca Excel 2010 kullanıyorum.


1
@SiddharthRout ile yapılan tartışmadan, şimdi sebebin farklı Excel sürümleri için farklı ayarlar olduğunu görüyoruz: büyük olasılıkla Excel 2010 veya sonraki sürümünü kullanıyorsunuz (Siddharth Rout'ta da 2010 var), ben 2007'yi kullanırken ve bağlantılarla ilgili hiçbir uyarı görmüyorsunuz İyi misin. Biraz daha araştırma yapacağız ve çalışan çözüme döneceğiz - umarım öyle) Şimdi Siddharth Rout'un cevabını deneyin.
Peter L.

2
Çok ilginç dava için olumlu oyum!
Peter L.

@PeterL. Dosyayı manuel olarak açtığınızda bile güncelleme bağlantılarını alamadığınız için, sanırım bir yerde kaçırdığım bir ayar var. Onaylamadan önce Excel 2007'de test edeyim. :)
Siddharth Rout

Sorunlu bir dosyanın bir örneğini gönderebilir misiniz? Bağlantıların doğasını görmek iyi olur
brettdj

@brettdj, tescillidir, bu yüzden tüm dosyayı gönderemiyorum. Bağlantıları araştıracağım, böylece onlarla ilgili bir sorun olup olmadığını görebilirim.
sigil

Yanıtlar:


139

GÜNCELLEME:

Tüm ayrıntılar özetlendikten ve tartışıldıktan sonra, seçenekleri kontrol etmek için 2 saat harcadım ve bu güncelleme tüm ie- postaları işaretlemek .

Hazırlıklar

Her şeyden önce, VMWare tarafından desteklenen Clean Win7 SP1 Ultimate x64 sanal makinesine temiz bir Office 2010 x86 kurulumu yaptım (bu, günlük test görevlerim için olağan bir rutindir, bu yüzden birçoğunu konuşlandırdım).

Ardından, yalnızca aşağıdaki Excel seçeneklerini değiştirdim (yani diğerlerinin tümü kurulumdan sonra olduğu gibi kaldı):

  • Advanced > General > Ask to update automatic links kontrol edildi :

Otomatik bağlantıları güncellemeyi isteyin

  • Trust Center > Trust Center Settings... > External Content > Enable All... (Veri Bağlantılarıyla ilgili olan büyük olasılıkla vaka için önemli olmasa da):

Harici İçerik

Ön koşullar

Güncellenmiş cevabındaki önerilere göre C:\tam olarak bir çalışma kitabını hazırladım ve yerleştirdim @Siddharth Rout(size kolaylık sağlamak için paylaşıldı): https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx Bağlantılı kitap daha sonra silindi, böylece paylaşılan içindeki bağlantı kitap kullanılamıyor (elbette).

Manuel Açılış

Yukarıdaki paylaşılan dosya açıldığında (yukarıda listelenen Excel seçeneklerine sahip) 2 uyarı gösterir - görünüm sırasına göre:

UYARI # 1

Bu çalışma kitabı, diğer veri kaynaklarına bağlantılar içerir

Tıkladıktan sonra Updatebeklediğim başka bir tane:

UYARI # 2

Bu çalışma kitabı güncellenemeyen bir veya daha fazla bağlantı içeriyor

Öyleyse, sanırım test ortamım artık OP's) ile hemen hemen benzer. Şimdiye kadar çok iyi, sonunda

VBA Açılışı

Şimdi, resmi netleştirmek için tüm olası seçenekleri adım adım deneyeceğim. Basitlik için yalnızca ilgili kod satırlarını paylaşacağım (kodun bulunduğu eksiksiz örnek dosya sonunda paylaşılacaktır).

1. Basit Uygulama.Workbooks.Open

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

Şaşırtıcı değil - bu, yukarıdaki manuel açmada olduğu gibi İKİ uyarıyı da üretir.

2. Application.DisplayAlerts = False

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

Bu kod UYARI # 1 ile biter ve tıklanan her iki seçenek de ( Update/ Don't Update) başka uyarılar YOKTUR, yani UYARI # 2'yiApplication.DisplayAlerts = False bastırır .

3. Application.AskToUpdateLinks = Yanlış

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

Bunun tersine DisplayAlerts, bu kod yalnızca UYARI # 2 ile sonuçlanır , yani UYARI # 1'iApplication.AskToUpdateLinks = False bastırır .

4. Çifte Yanlış

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

Görünüşe göre, bu kod İKİ UYARILARIN da bastırılmasıyla sonuçlanıyor .

5. Güncelleme Bağlantıları: = Yanlış

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

Son olarak, bu 1 satırlık çözüm (ilk olarak tarafından önerilmiştir @brettdj) Double False ile aynı şekilde çalışır: HİÇBİR UYARI gösterilmez!

Sonuçlar

İyi bir test uygulaması ve çok önemli çözülmüş vakalar dışında (çalışma kitaplarımı 3. tarafa gönderirken her gün bu tür sorunlarla karşılaşabilirim ve şimdi hazırım), öğrenilen 2 şey daha:

  1. Excel seçenekleri, sürümden bağımsız olarak ÖNEMLİDİR - özellikle VBA çözümlerine geldiğimizde.
  2. Her sorunun kısa ve zarif bir çözümü vardır - açık olmayan ve karmaşık olanla birlikte. Bunun için sadece bir kanıt daha!)

Çözüme katkıda bulunan herkese ve özellikle soruyu gündeme getiren OP'ye çok teşekkürler. Umarım araştırmalarım ve ayrıntılı olarak açıklanan test adımları sadece bana yardımcı olmadı)

Yukarıdaki kod örneklerine sahip örnek dosya paylaşılır (birçok satır kasıtlı olarak yorumlanır): https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm

Orijinal yanıt ( belirli seçeneklerle Excel 2007 için test edilmiştir ):

Bu kod benim için iyi çalışıyor - joker karakterler kullanılarak belirtilen TÜM Excel dosyalarının içinde dolaşıyor 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

Dış bağlantıları olmayan kitaplarla denedim - uyarı yok.

Örnek dosya: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm


6
Application.DisplayAlerts = Falsebu uyarıları devre dışı bırakmayacak :)
Siddharth Rout

@SiddharthRout Sid Yemin ederim onları görmüyorum: Bu tür bağlantıları olan bir dosyam var ve manuel olarak açarken uyarıyı görüyorum. Yukarıdaki komut dosyasıyla - uyarı yok) Videoyu sizin için paylaşabilir))) Excel 2007 - her ihtimale karşı.
Peter L.

Tamam bunu deneyin :) İki yeni çalışma kitabı açın. Bunları book1.xlsx ve book2.xlsx olarak kaydedin. Book1'in A1 Hücresine "=" yazın ve bunu Book2'nin A1 hücresine yönlendirin. Dilerseniz Book2'nin A1 hücresine bir şey yazın ve ardından her iki çalışma kitabını da kapatın. Şimdi kodunuzu kullanarak book1'i açın ve hala komut istemini aldığınızı göreceksiniz :)
Siddharth Rout

Ayrıca yukarıdaki egzersizi çalıştırmadan önce ?Application.AskToUpdateLinks, Hemen penceresini kontrol edin . Zaten false olarak mı ayarlanmış yoksa doğru mu ...
Siddharth Rout

2
Brettdj için +1. Tüm raporlarınız benzer ise müşterileriniz mutlu olmalıdır)
Ksenia

23

Excel'in VBA Düzenleyicisini açın ve bunu Hemen Pencereye yazın (Ekran görüntüsüne bakın)

Application.AskToUpdateLinks = False 

Excel'i kapatın ve ardından Dosyanızı açın. Sizi tekrar istemeyecek. Çalışma kitabını kapattığınızda sıfırlamayı unutmayın, aksi takdirde diğer çalışma kitapları için de çalışmayacaktır.

ScreenShot :

görüntü açıklamasını buraya girin

DÜZENLE

Yani bunu kodunuza uygularsanız, kodunuz şöyle görünecektir

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

TAKİP ET

Sigil, Aşağıdaki kod, bozuk bağlantıları olan dosyalarda da çalışır. İşte test kodum.

Test Koşulları

  1. 2 yeni dosya oluşturun. Onları adlandırın Sample1.xlsxve Sample2.xlsxkaydedinC:\
  2. Hücresine A1ait Sample1.xlsxbu formülü yazın='C:\[Sample2.xlsx]Sheet1'!$A$1
  3. Her iki dosyayı da kaydedin ve kapatın
  4. Sample2.xlsx'i silin !!!
  5. Yeni bir çalışma kitabı açın ve modülü bu kodu yapıştırın ve çalıştırın Sample. Bir uyarı almayacağınızı fark edeceksiniz.

Kod

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

3
Bu kod benim için çalıştı Sid ( xl2010'da ) mesajı devre dışı bıraktı , ancak arka planda bağlantıyı güncelledi. Set getWorkbook = Workbooks.Open (bkPath, False) '' kullanılması uyarıyı bastırır ve güncellemeyi yürütmez. Xl03 ve xl10
brettdj

1
Teşekkürler Dave. :) BTW, sanırım xl03 ve xl2007'yi kastettiniz: P Ayrıca yukarıdaki yazıyı sizin önerinizi yansıtacak şekilde düzenledim.
Siddharth Rout

1
@brettdj çok teşekkürler! O sabah Sid'le davayı çözmeye çalışırken güzel bir saat geçirdik. Peki, yukarıdaki kod herhangi bir Excel sürümü için tüm uyarıları bastıracak ve bağlantıların sessizce güncellenmesini sağlayacak mı? Ve kodu AVOID güncellemesine nasıl değiştirmeliyim? Üzgünüm, seçenekler biraz kaybetti, ama) tüm doğru izah umut
Peter L.

@brettdj ve eklenirse ne olur Application.DisplayAlerts = False?
Peter L.

1
@sigil: Çalışma kitabınızı görmeden, daha fazla yorum yapamayacağım. Kodumu farklı koşullarda test ettim ve kusursuz çalışıyor. Aslında bu uyarıları bastırmanın doğru yolu ...
Siddharth Rout

6

Excel 2016 Bir çalışma kitabı / dosya oluşturduğumda benzer bir sorun yaşadım ve ardından isimleri değiştirdim ama bir şekilde eski çalışma kitabı adı saklandı. Bir sürü googling yaptıktan sonra ... orada son bir cevap bulamadım ...

VERİ -> Bağlantıyı Düzenle -> Başlangıç ​​İstemi'ne gidin (altta) Sonra sizin için en iyi seçeneği seçin.


3
Bu en iyi çözüm. Yalnızca bu seçimin yapıldığı çalışma kitabını etkiler ve herhangi bir VBA gerektirmez.
Gaia

5

Çalışma kitabım Excel'de manuel olarak açıldığında başka bir çalışma kitabına giden bağlantıları güncellemek isteyip istemediğinizi soran uyarıyı bastırmak istedim (VBA aracılığıyla programlı olarak açmak yerine). Makroyu Application.AskToUpdateLinks = Falseilk satır olarak eklemeyi denedim Auto_Open()ama işe yaramadı. Bununla birlikte , onu modüldeki Workbook_Open()işleve koyarsanız ThisWorkbook, mükemmel çalıştığını keşfettim - iletişim kutusu bastırılır, ancak güncelleme arka planda sessizce devam eder.

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

İyi bir fikir; ne yazık ki bu proje, içeriğini değiştiremediğim bir dizi çalışma kitabını açmamı gerektirdi. Dolayısıyla Workbook_Open(), hedef kümemdeki çalışma kitaplarının her biri için olay ayarlamanın bir yolu olmayacaktı .
2013

3

(Yorum eklemek için yeterli temsilci puanım yok, ancak buradaki yanıtlara biraz açıklık eklemek istiyorum)

Application.AskToUpdateLinks = False muhtemelen istediğiniz şey değil.

False olarak belirlerseniz, MS Excel olacak sadece will istemi olmayan kullanıcı önceden, sayılır karşı sezgisel otomatik bağlantıları güncelleştirmek çalışırlar.

Olmadan bir dosya açmak istiyorsanız doğru çözüm olmalıdır bağlantıları güncelleyerek:

Çalışma Kitabı.Aç (UpdateLinks: = 0)

İlgili bağlantı: AskToUpdateLinks = False ve UpdateLinks'deki fark: = 0


2

En azından bu işi yapmama izin verecek geçici bir çözüm buldum. "Bağlantıları Güncelle" penceresinin görünmesini bekleyen kısa bir AutoIt komut dosyası yazdım ve ardından "Güncelleme" düğmesini tıkladım. Kod aşağıdaki gibidir:

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

Şimdiye kadar bu işe yarıyor gibi görünüyor. Bununla birlikte, tamamen VBA olan bir çözüm bulmayı gerçekten çok isterim, böylece bunu bağımsız bir uygulama haline getirebilirim.


2

Bu soruyu (veya bir kısmını) çözerken fazladan girdi vermeyi umuyoruz.

Bu, Excelbaşka bir dosyadan bir dosya açmak için çalışacaktır . Değişiklik için Bay Peter L.'den bir kod satırı , aşağıdakileri kullanın:

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

Bu içeride MSDS. Bunun etkisi, her şeyi (evet, her şeyi) hiçbir uyarı olmadan güncellemesidir. Bir makro kaydederseniz bu da kontrol edilebilir.

Olarak MSDS, bu, bu ifade eder MS EXCEL 2010ve 2013. Bunun da MS EXCEL 2016kapsandığını düşünüyorum .

Ben MS EXCEL 2013ve bir durum hemen hemen bu konu ile aynı olması. Bu yüzden , her zaman güncelleme bağlantıları isteminde takılan olay koduna sahip bir dosyam var (çağırın A) . Buna bağlı başka bir dosyam var (onu çağırın ) ve Pivot Tablolar beni veri modelinin yüklenebilmesi için dosyayı açmaya zorluyor . Dosyayı arka planda sessizce açmak istediğim için sadece yukarıda yazdığım satırı a ile kullanıyorum ve daha büyük bir yükleme süresi dışında dosyayı dosyadan sorunsuz ve tamamen güncellenmiş olarak açıyorum. .Workbook_OpenBAAWindows("A.xlsx").visible = falseAB

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.