Bagaimana cara menyembunyikan peringatan Tautan Pembaruan?

109

Saya mencoba menulis skrip yang membuka banyak file Excel. Saya terus mendapatkan prompt:

This workbook contains links to other data sources.

Saya ingin mencegah pesan ini muncul, sehingga skrip saya bisa secara otomatis melalui semua buku kerja tanpa saya harus mengklik Don't Updatemasing-masing. Saat ini saya menggunakan yang berikut:

function getWorkbook(bkPath as string) as workbook

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

end function

Namun, pesan tersebut tetap muncul. Bagaimana saya bisa menekannya?

EDIT: Tampaknya pesan ini akan datang untuk buku kerja yang memiliki tautan rusak; Saya tidak melihat This workbook contains one or more links that cannot be updatedpesan itu karena saya menyetelnya DisplayAlertske false. Buku kerja ditautkan ke file yang setara dalam folder di server Windows kami, jadi saat file yang cocok dihapus dari folder itu (yang terjadi sebagai bagian dari alur bisnis kami), tautan akan putus. Apakah mungkin untuk menekan peringatan saat link putus?

Juga, saya menggunakan Excel 2010.

sigil
sumber
1
Dari diskusi dengan @SiddharthRout kita melihat sekarang penyebabnya adalah pengaturan yang berbeda untuk versi Excel yang berbeda: kemungkinan besar Anda menggunakan Excel 2010 atau yang lebih baru (Siddharth Rout memiliki 2010 juga), saat saya menggunakan 2007 dan tidak melihat peringatan sama sekali jika tautan baik-baik saja. Kami akan melakukan beberapa investigasi lagi dan kembali dengan solusi yang berfungsi - saya harap begitu) Sekarang coba jawaban Siddharth Rout.
Peter L.
2
Suara positif saya untuk kasus yang sangat menarik!
Peter L.
@PeterL. karena Anda tidak mendapatkan tautan pembaruan bahkan ketika Anda membuka file secara manual, saya kira ada pengaturan yang saya lewatkan di suatu tempat. Izinkan saya mengujinya di Excel 2007 sebelum saya dapat mengonfirmasi. :)
Rute Siddharth
Dapatkah Anda memposting contoh file masalah? Akan sangat baik untuk melihat sifat tautan
brettdj
@brettdj, itu hak milik jadi saya tidak bisa mengirim seluruh file. Saya akan menyelidiki tautannya sehingga saya dapat melihat apakah ada masalah dengan mereka.
sigil

Jawaban:

139

MEMPERBARUI:

Setelah semua detail dirangkum dan dibahas, saya menghabiskan 2 jam yang adil untuk memeriksa opsi, dan pembaruan ini adalah untuk menandai semua i.

Persiapan

Pertama-tama, saya melakukan penginstalan Office 2010 x86 yang bersih pada mesin virtual Clean Win7 SP1 Ultimate x64 yang didukung oleh VMWare (ini adalah rutinitas biasa untuk tugas pengujian sehari-hari saya, jadi saya memiliki banyak dari mereka yang disebarkan).

Kemudian, saya hanya mengubah opsi Excel berikut (yaitu semua yang lain dibiarkan apa adanya setelah instalasi):

  • Advanced > General > Ask to update automatic links diperiksa :

Minta untuk memperbarui tautan otomatis

  • Trust Center > Trust Center Settings... > External Content > Enable All... (meskipun yang terkait dengan Koneksi Data kemungkinan besar tidak penting untuk kasus ini):

Konten Eksternal

Prasyarat

Saya menyiapkan dan menempatkan ke C:\buku kerja persis seperti @Siddharth Routsaran dalam jawaban yang diperbarui (dibagikan untuk kenyamanan Anda): https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx Buku yang ditautkan itu kemudian dihapus sehingga tautan di dibagikan buku tidak tersedia (pasti).

Pembukaan Manual

File bersama di atas menunjukkan saat membuka (memiliki opsi Excel yang tercantum di atas) 2 peringatan - dalam urutan tampilan:

PERINGATAN # 1

Buku kerja ini berisi link ke sumber data lain

Setelah mengklik, Updatesaya berharap mendapat yang lain:

PERINGATAN # 2

Buku kerja ini berisi satu atau beberapa link yang tidak bisa diperbarui

Jadi, saya kira lingkungan pengujian saya sekarang sangat mirip dengan OP) Sejauh ini sangat bagus, akhirnya kita lanjutkan ke

Pembukaan VBA

Sekarang saya akan mencoba semua opsi yang memungkinkan selangkah demi selangkah untuk memperjelas gambar. Saya hanya akan membagikan baris kode yang relevan untuk kesederhanaan (file sampel lengkap dengan kode akan dibagikan pada akhirnya).

1. Aplikasi Sederhana. Buku Kerja. Terbuka

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

Tidak mengherankan - ini menghasilkan peringatan KEDUA, seperti untuk pembukaan manual di atas.

2. Application.DisplayAlerts = False

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

Kode ini diakhiri dengan PERINGATAN # 1 , dan salah satu opsi yang diklik ( Update/ Don't Update) TIDAK menghasilkan peringatan lebih lanjut, yaitu Application.DisplayAlerts = Falsemenekan PERINGATAN # 2 .

3. Application.AskToUpdateLinks = False

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

Sebaliknya DisplayAlerts, kode ini berakhir dengan PERINGATAN # 2 saja, yaitu Application.AskToUpdateLinks = Falsemenyembunyikan PERINGATAN # 1 .

4. Salah Ganda

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

Rupanya, kode ini berakhir dengan menekan PERINGATAN KEDUA .

5. UpdateLinks: = False

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

Akhirnya, solusi 1 baris ini (awalnya diusulkan oleh @brettdj) bekerja dengan cara yang sama seperti Double False: TIDAK ADA PERINGATAN yang ditampilkan!

Kesimpulan

Kecuali praktik pengujian yang baik dan kasus terselesaikan yang sangat penting (saya mungkin menghadapi masalah seperti itu setiap hari saat mengirim buku kerja saya ke pihak ketiga, dan sekarang saya siap), 2 hal lagi yang dipelajari:

  1. Opsi Excel PENTING, apa pun versinya - terutama ketika kita membahas solusi VBA.
  2. Setiap masalah memiliki solusi yang singkat dan elegan - bersama dengan solusi yang tidak jelas dan rumit. Satu lagi bukti untuk itu!)

Terima kasih banyak kepada semua orang yang berkontribusi pada solusi, dan terutama OP yang mengajukan pertanyaan. Semoga penyelidikan saya dan langkah-langkah pengujian yang dijelaskan secara menyeluruh bermanfaat tidak hanya untuk saya)

File contoh dengan contoh kode di atas dibagikan (banyak baris yang sengaja dikomentari): https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm

Jawaban asli (diuji untuk Excel 2007 dengan opsi tertentu):

Kode ini berfungsi dengan baik untuk saya - ini mengulang SEMUA file Excel yang ditentukan menggunakan wildcard di 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

Saya mencobanya dengan buku-buku dengan tautan eksternal yang tidak tersedia - tanpa peringatan.

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

Peter L.
sumber
6
Application.DisplayAlerts = Falsetidak akan menonaktifkan peringatan tersebut :)
Siddharth Rout
@ SiddharthRout Sid Saya bersumpah saya tidak melihatnya: Saya memiliki file dengan tautan seperti itu dan melihat peringatan saat membukanya secara manual. Dengan skrip di atas - tanpa peringatan) Dapat membagikan video untuk Anda))) Excel 2007 - untuk berjaga-jaga.
Peter L.
Ok coba ini :) Buka dua workbook baru. Simpan sebagai book1.xlsx dan book2.xlsx. Di Sel A1 book1, ketik "=" dan arahkan ke sel A1 Book2. Ketik sesuatu di sel A1 dari Book2 jika Anda ingin dan kemudian tutup kedua buku kerja. Sekarang buka book1 menggunakan kode Anda dan Anda akan melihat bahwa Anda masih mendapatkan prompt :)
Siddharth Rout
Juga sebelum Anda menjalankan latihan di atas, periksa ?Application.AskToUpdateLinksdi jendela Immediate. Apakah sudah disetel ke salah atau apakah itu benar ...
Siddharth Rout
2
1 untuk brettdj. Pelanggan Anda pasti senang jika semua laporan Anda serupa)
Ksenia
22

Buka VBA Editor of Excel dan ketik ini di Jendela Segera (Lihat Screenshot)

Application.AskToUpdateLinks = False 

Tutup Excel, lalu buka File Anda. Ini tidak akan meminta Anda lagi. Ingatlah untuk mengatur ulang saat Anda menutup buku kerja, itu tidak akan berfungsi untuk buku kerja lain juga.

ScreenShot :

masukkan deskripsi gambar di sini

EDIT

Jadi menerapkannya ke kode Anda, kode Anda akan terlihat seperti ini

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

MENGIKUTI

Sigil, Kode di bawah ini juga berfungsi pada file dengan tautan rusak. Ini kode tes saya.

Kondisi Tes

  1. Buat 2 file baru. Nama mereka Sample1.xlsxdan Sample2.xlsxdan menyimpannya padaC:\
  2. Dalam sel A1dari Sample1.xlsx, ketik rumus ini='C:\[Sample2.xlsx]Sheet1'!$A$1
  3. Simpan dan tutup kedua file tersebut
  4. Hapus Sample2.xlsx !!!
  5. Buka buku kerja baru dan modul tempel kode ini dan jalankan Sample. Anda akan melihat bahwa Anda tidak akan mendapatkan prompt.

Kode

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
Rute Siddharth
sumber
3
Kode itu berfungsi untuk saya Sid ( di xl2010 ) karena menonaktifkan pesan, tetapi itu memperbarui tautan di latar belakang. Menggunakan `Set getWorkbook = Workbooks.Open (bkPath, False)` akan menekan peringatan, dan tidak mendorong pembaruan. Ke pengujian xl03 dan xl10
brettdj
1
Terima kasih Dave. :) BTW, saya kira yang Anda maksud xl03 dan xl2007: P Juga saya mengedit posting di atas untuk mencerminkan saran Anda.
Rute Siddharth
1
@brettdj terima kasih banyak! Kami menghabiskan satu jam yang baik dengan Sid pagi itu mencoba mencari tahu kasusnya. Jadi, apakah kode di atas akan menyembunyikan semua peringatan untuk versi Excel apa pun dan membuat tautan diperbarui secara diam-diam? Dan bagaimana cara mengubah kode untuk MENGHINDARI pembaruan? Maaf, saya agak bingung dalam memilih, tapi harap saya menjelaskan semuanya dengan benar)
Peter L.
@brettdj dan apa jadinya jika Application.DisplayAlerts = Falseditambahkan juga?
Peter L.
1
@sigil: Tanpa melihat buku kerja Anda, saya tidak dapat berkomentar lebih lanjut. Saya telah menguji kode saya dengan berbagai kondisi dan berfungsi dengan sempurna. Sebenarnya ini adalah cara yang tepat untuk menekan peringatan itu ...
Siddharth Rout
6

Excel 2016 Saya mengalami masalah yang sama ketika saya membuat buku kerja / file dan kemudian saya mengubah nama tetapi entah bagaimana nama buku kerja yang lama disimpan. Setelah banyak googling ... yah, tidak menemukan jawaban akhir di sana ...

Pergi ke DATA -> Edit Link -> Startup Prompt (di bagian bawah) Kemudian pilih opsi terbaik untuk Anda.

pengguna2060451
sumber
3
Ini solusi terbaik. Ini hanya memengaruhi buku kerja tempat pilihan ini dibuat dan tidak memerlukan VBA apa pun.
Gaia
5

Saya ingin menyembunyikan prompt yang menanyakan apakah Anda ingin memperbarui tautan ke buku kerja lain saat buku kerja saya dibuka secara manual di Excel (sebagai lawan membukanya secara terprogram melalui VBA). Saya mencoba memasukkan: Application.AskToUpdateLinks = Falsesebagai baris pertama dalam Auto_Open()makro saya, tetapi tidak berhasil. Namun saya menemukan bahwa jika Anda meletakkannya sebagai gantinya ke dalam Workbook_Open()fungsi di ThisWorkbookmodul, itu bekerja dengan sangat baik - dialog disembunyikan tetapi pembaruan masih terjadi secara diam-diam di latar belakang.

 Private Sub Workbook_Open()
    ' Suppress dialog & update automatically without asking
    Application.AskToUpdateLinks = False
End Sub
Renwick Wright
sumber
Ide bagus; Sayangnya, proyek ini mengharuskan saya membuka satu set workbook yang isinya tidak dapat saya modifikasi. Jadi tidak akan ada cara untuk mengatur Workbook_Open()acara untuk setiap buku kerja dalam kumpulan target saya.
sigil
3

(Saya tidak memiliki cukup poin perwakilan untuk menambahkan komentar, tetapi saya ingin menambahkan beberapa kejelasan tentang jawaban di sini)

Application.AskToUpdateLinks = Salah mungkin bukan yang Anda inginkan.

Jika disetel ke False, maka MS Excel akan mencoba memperbarui tautan secara otomatis itu tidak akan meminta pengguna sebelumnya, semacam kontra-intuitif.

Solusi yang tepat, jika Anda ingin membuka file tanpa memperbarui tautan adalah:

Workbook.Open (UpdateLinks: = 0)

Tautan terkait: Perbedaan AskToUpdateLinks = False dan UpdateLinks: = 0

Donaldo Almazan
sumber
2

Saya telah menemukan solusi sementara yang setidaknya memungkinkan saya memproses pekerjaan ini. Saya menulis skrip AutoIt pendek yang menunggu jendela "Perbarui Tautan" muncul, lalu klik tombol "Jangan Perbarui". Kode adalah sebagai berikut:

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

Sejauh ini tampaknya berhasil. Saya benar-benar ingin menemukan solusi yang sepenuhnya VBA, sehingga saya dapat menjadikan ini aplikasi mandiri.

sigil
sumber
2

Berharap dapat memberikan masukan tambahan dalam menjawab pertanyaan ini (atau sebagian).

Ini akan berfungsi untuk membuka Excelfile dari yang lain. Baris kode dari Mr. Peter L. , untuk perubahan, gunakan yang berikut:

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

Ini masuk MSDS. Efeknya adalah ia hanya memperbarui segalanya (ya, semuanya) tanpa peringatan. Ini juga dapat diperiksa jika Anda merekam makro.

Dalam MSDS, ini mengacu pada MS EXCEL 2010dan 2013. Saya pikir itu juga MS EXCEL 2016sudah dibahas.

Saya pernah MS EXCEL 2013, dan memiliki situasi yang hampir sama dengan topik ini. Jadi saya memiliki file (sebut saja A) dengan Workbook_Openkode peristiwa yang selalu macet di prompt tautan pembaruan . Saya memiliki file lain (sebut saja B) yang terhubung ke yang ini, dan Tabel Pivot memaksa saya untuk membuka file tersebut Asehingga model data dapat dimuat. Karena saya ingin membuka Afile secara diam-diam di latar belakang, saya hanya menggunakan baris yang saya tulis di atas, dengan Windows("A.xlsx").visible = false, dan, selain waktu pemuatan yang lebih besar, saya membuka Afile dari Bfile tersebut tanpa masalah atau peringatan, dan sepenuhnya diperbarui .

JDF
sumber