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 Update
masing-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 updated
pesan itu karena saya menyetelnya DisplayAlerts
ke 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.
Jawaban:
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 :Trust Center > Trust Center Settings... > External Content > Enable All...
(meskipun yang terkait dengan Koneksi Data kemungkinan besar tidak penting untuk kasus ini):Prasyarat
Saya menyiapkan dan menempatkan ke
C:\
buku kerja persis seperti@Siddharth Rout
saran 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
Setelah mengklik,
Update
saya berharap mendapat yang lain:PERINGATAN # 2
Jadi, saya kira lingkungan pengujian saya sekarang sangat mirip dengan
OP
) Sejauh ini sangat bagus, akhirnya kita lanjutkan kePembukaan 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
Tidak mengherankan - ini menghasilkan peringatan KEDUA, seperti untuk pembukaan manual di atas.
2. Application.DisplayAlerts = False
Kode ini diakhiri dengan PERINGATAN # 1 , dan salah satu opsi yang diklik (
Update
/Don't Update
) TIDAK menghasilkan peringatan lebih lanjut, yaituApplication.DisplayAlerts = False
menekan PERINGATAN # 2 .3. Application.AskToUpdateLinks = False
Sebaliknya
DisplayAlerts
, kode ini berakhir dengan PERINGATAN # 2 saja, yaituApplication.AskToUpdateLinks = False
menyembunyikan PERINGATAN # 1 .4. Salah Ganda
Rupanya, kode ini berakhir dengan menekan PERINGATAN KEDUA .
5. 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:
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
:Saya mencobanya dengan buku-buku dengan tautan eksternal yang tidak tersedia - tanpa peringatan.
File sampel: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
sumber
Application.DisplayAlerts = False
tidak akan menonaktifkan peringatan tersebut :)?Application.AskToUpdateLinks
di jendela Immediate. Apakah sudah disetel ke salah atau apakah itu benar ...Buka VBA Editor of Excel dan ketik ini di Jendela Segera (Lihat Screenshot)
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 :
EDIT
Jadi menerapkannya ke kode Anda, kode Anda akan terlihat seperti ini
MENGIKUTI
Sigil, Kode di bawah ini juga berfungsi pada file dengan tautan rusak. Ini kode tes saya.
Kondisi Tes
Sample1.xlsx
danSample2.xlsx
dan menyimpannya padaC:\
A1
dariSample1.xlsx
, ketik rumus ini='C:\[Sample2.xlsx]Sheet1'!$A$1
Sample
. Anda akan melihat bahwa Anda tidak akan mendapatkan prompt.Kode
sumber
Application.DisplayAlerts = False
ditambahkan juga?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.
sumber
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 = False
sebagai baris pertama dalamAuto_Open()
makro saya, tetapi tidak berhasil. Namun saya menemukan bahwa jika Anda meletakkannya sebagai gantinya ke dalamWorkbook_Open()
fungsi diThisWorkbook
modul, itu bekerja dengan sangat baik - dialog disembunyikan tetapi pembaruan masih terjadi secara diam-diam di latar belakang.sumber
Workbook_Open()
acara untuk setiap buku kerja dalam kumpulan target saya.(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
sumber
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:
Sejauh ini tampaknya berhasil. Saya benar-benar ingin menemukan solusi yang sepenuhnya VBA, sehingga saya dapat menjadikan ini aplikasi mandiri.
sumber
Berharap dapat memberikan masukan tambahan dalam menjawab pertanyaan ini (atau sebagian).
Ini akan berfungsi untuk membuka
Excel
file dari yang lain. Baris kode dari Mr. Peter L. , untuk perubahan, gunakan yang berikut: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 padaMS EXCEL 2010
dan2013
. Saya pikir itu jugaMS EXCEL 2016
sudah dibahas.Saya pernah
MS EXCEL 2013
, dan memiliki situasi yang hampir sama dengan topik ini. Jadi saya memiliki file (sebut sajaA
) denganWorkbook_Open
kode peristiwa yang selalu macet di prompt tautan pembaruan . Saya memiliki file lain (sebut sajaB
) yang terhubung ke yang ini, dan Tabel Pivot memaksa saya untuk membuka file tersebutA
sehingga model data dapat dimuat. Karena saya ingin membukaA
file secara diam-diam di latar belakang, saya hanya menggunakan baris yang saya tulis di atas, denganWindows("A.xlsx").visible = false
, dan, selain waktu pemuatan yang lebih besar, saya membukaA
file dariB
file tersebut tanpa masalah atau peringatan, dan sepenuhnya diperbarui .sumber