अपडेट लिंक चेतावनी को कैसे दबाएं?


109

मैं एक स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो कई एक्सेल फाइलें खोलता है। मुझे संकेत मिलते रहते हैं:

This workbook contains links to other data sources.

मैं इस संदेश को प्रदर्शित होने से बचाना चाहता हूं, ताकि मेरी स्क्रिप्ट बिना किसी Don't Updateएक के लिए क्लिक किए मेरे पास बस अपने आप ही सभी कार्यपुस्तिकाओं के माध्यम से जा सके। वर्तमान में मैं निम्नलिखित का उपयोग कर रहा हूं:

function getWorkbook(bkPath as string) as workbook

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

end function

हालाँकि, संदेश अभी भी दिखाई दे रहा है। मैं इसे कैसे दबा सकता हूं?

संपादित करें: ऐसा प्रतीत होता है कि यह संदेश उन कार्यपुस्तिकाओं के लिए आ रहा है जिन्होंने लिंक तोड़ दिए हैं; मैं This workbook contains one or more links that cannot be updatedसंदेश नहीं देख रहा था क्योंकि मैं DisplayAlertsझूठ बोलूंगा। कार्यपुस्तिकाएं हमारे विंडोज सर्वर पर एक फ़ोल्डर में समतुल्य फाइलों से जुड़ी होती हैं, इसलिए जब उस फ़ोल्डर से मिलान फाइल को हटा दिया जाता है (जो हमारे व्यापार प्रवाह के हिस्से के रूप में होता है), लिंक टूट जाता है। क्या लिंक के टूटने पर चेतावनी को दबाना संभव है?

साथ ही, मैं Excel 2010 का उपयोग कर रहा हूं।


1
@SiddharthRout के साथ चर्चा से अब हम देखते हैं कि इसका कारण अलग-अलग एक्सेल संस्करणों के लिए अलग-अलग सेटिंग्स हैं: सबसे अधिक संभावना है कि आप एक्सेल 2010 या बाद में उपयोग करते हैं (सिद्धार्थ राउत के पास 2010 भी है), जबकि मैं 2007 का उपयोग कर रहा हूं और लिंक पर कोई चेतावनी नहीं देख रहा हूं ठीक हैं। हम कुछ और जाँच करेंगे और काम के समाधान के साथ वापस आएँगे - मुझे आशा है कि) अब सिद्धार्थ राउत के उत्तर का प्रयास करें।
पीटर एल।

2
बहुत दिलचस्प मामले के लिए मेरा उत्थान!
पीटर एल।

@PeterL। चूँकि आपको फ़ाइल को मैन्युअल रूप से खोलने पर भी अपडेट लिंक नहीं मिल रहे हैं, मुझे लगता है कि एक सेटिंग है जो मुझे कहीं याद आ रही है। पुष्टि करने से पहले मुझे Excel 2007 में इसका परीक्षण करने दें। :)
सिद्धार्थ रूट

क्या आप किसी समस्या फ़ाइल का एक नमूना पोस्ट कर सकते हैं? लिंक्स की प्रकृति को देखना अच्छा होगा
brettdj

@bretjj, यह मालिकाना है इसलिए मैं एक पूरी फ़ाइल पोस्ट नहीं कर सकता। मैं लिंक की जाँच करूँगा ताकि मैं देख सकूँ कि उनके साथ कुछ समस्या है।
sigil

जवाबों:


139

अपडेट करें:

सभी विवरणों को संक्षेप में प्रस्तुत करने और चर्चा करने के बाद, मैंने विकल्पों की जाँच में 2 उचित घंटे बिताए, और यह अद्यतन सभी को डॉट करना है i

तैयारी

सबसे पहले, मैंने VMWare द्वारा संचालित क्लीन Win7 SP1 अल्टीमेट x64 वर्चुअल मशीन पर एक क्लीन ऑफिस 2010 x86 इनस्टॉल किया (यह मेरे रोजमर्रा के परीक्षण कार्यों के लिए सामान्य दिनचर्या है, इसलिए मैंने उनमें से कई को तैनात किया है)।

फिर, मैंने केवल निम्नलिखित एक्सेल विकल्पों को बदल दिया (अर्थात अन्य सभी को छोड़ दिया गया है जैसा कि स्थापना के बाद है):

  • Advanced > General > Ask to update automatic links जाँच की गई :

स्वचालित लिंक अपडेट करने के लिए कहें

  • Trust Center > Trust Center Settings... > External Content > Enable All... (हालांकि जो डेटा कनेक्शंस से संबंधित है, वह इस मामले के लिए महत्वपूर्ण नहीं है):

बाहरी सामग्री

पूर्व शर्त

मैंने उनके अद्यतन उत्तर (आपकी सुविधा के लिए साझा) में सुझावों के C:\अनुसार एक कार्यपुस्तिका बिल्कुल तैयार की और रखी @Siddharth Rout: https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsb लिंक लिंक बुक तब हटा दी गई थी ताकि साझा में लिंक लिंक हो जाए पुस्तक अनुपलब्ध है (निश्चित रूप से)।

मैनुअल उद्घाटन

उपरोक्त साझा फ़ाइल खोलने पर (ऊपर सूचीबद्ध एक्सेल विकल्प होने पर) 2 चेतावनियाँ - उपस्थिति के क्रम में:

चेतावनी # 1

इस कार्यपुस्तिका में अन्य डेटा स्रोतों के लिंक शामिल हैं

पर क्लिक करने के बाद Update मुझे उम्मीद है कि एक और मिल गया है:

चेतावनी # 2

इस कार्यपुस्तिका में एक या अधिक लिंक हैं जिन्हें अपडेट नहीं किया जा सकता है

इसलिए, मुझे लगता है कि मेरा परीक्षण वातावरण अब बहुत अधिक समान है OP 'एस' के । अब तक हम बहुत अच्छे हैं

VBA ओपनिंग

अब मैं चित्र को स्पष्ट करने के लिए हर संभव कदम उठाऊँगा। मैं सादगी के लिए कोड की केवल प्रासंगिक पंक्तियों को साझा करूंगा (कोड के साथ पूर्ण नमूना फ़ाइल अंत में साझा की जाएगी)।

1. सरल अनुप्रयोग .orkbooks.Open

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

कोई आश्चर्य नहीं - यह बीओटीएच चेतावनी का उत्पादन करता है, जैसा कि ऊपर दिए गए मैनुअल उद्घाटन के लिए है।

2. आवेदन.डिसप्लेअलरट्स = गलत

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

यह कोड WARNING # 1 के साथ समाप्त होता है , और या तो क्लिक किए गए विकल्प ( Update/ Don't Update) NO को और चेतावनी देते हैं, अर्थात # 2 चेतावनी कोApplication.DisplayAlerts = False दबा देते हैं ।

3. Application.AskToUpdateLinks = गलत

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

के विपरीत DisplayAlerts, यह कोड केवल # 2 के साथ समाप्त होता है , अर्थात # 1 कोApplication.AskToUpdateLinks = False दबाता है ।

4. दोहरा झूठा

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

जाहिरा तौर पर, यह कोड BOTH WARNINGS को दबाने के साथ समाप्त होता है ।

5. अपडेटलिंक: = गलत

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

अंत में, यह 1-लाइन समाधान (मूल रूप से प्रस्तावित @brettdj) उसी तरह से काम करता है जैसे डबल फाल्स: कोई चेतावनी नहीं दिखाई जाती है!

निष्कर्ष

एक अच्छे परीक्षण अभ्यास और बहुत महत्वपूर्ण हल किए गए मामले को छोड़कर (मैं अपनी कार्यपुस्तिकाओं को तीसरी पार्टी को भेजते समय हर रोज ऐसे मुद्दों का सामना कर सकता हूं, और अब मैं तैयार हूं), 2 और चीजें सीखी गईं:

  1. एक्सेल विकल्प DO मैटर, वर्जन की परवाह किए बिना - खासकर जब हम VBA समाधानों में आते हैं।
  2. हर मुसीबत का छोटा और सुरुचिपूर्ण समाधान होता है - एक साथ स्पष्ट और जटिल नहीं। उसके लिए बस एक और प्रमाण!)

उन सभी को बहुत बहुत धन्यवाद जिन्होंने समाधान में योगदान दिया, और विशेष रूप से ओपी जिन्होंने सवाल उठाया। आशा है कि मेरी जाँच और अच्छी तरह से वर्णित परीक्षण कदम मेरे लिए न केवल सहायक थे)

उपरोक्त कोड के नमूने के साथ नमूना फ़ाइल साझा की गई है (कई पंक्तियों को जानबूझकर टिप्पणी की गई है): https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm

मूल उत्तर ( कुछ विकल्पों के साथ एक्सेल 2007 के लिए परीक्षण किया गया ):

यह कोड मेरे लिए ठीक काम करता है - यह वाइल्डकार्ड के उपयोग से निर्दिष्ट सभी एक्सेल फाइलों के माध्यम से लूप करता है 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

मैंने इसे अनुपलब्ध बाहरी लिंक वाली पुस्तकों के साथ आज़माया - कोई चेतावनी नहीं।

नमूना फ़ाइल: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm


6
Application.DisplayAlerts = Falseउन चेतावनियों को अक्षम नहीं करेगा :)
सिद्धार्थ राउत

@SiddharthRout सिड मैं कसम खाता हूं कि मैं उन्हें नहीं देखता: मेरे पास ऐसे लिंक के साथ एक फ़ाइल है और इसे मैन्युअल रूप से खोलने के दौरान चेतावनी देखें। उपरोक्त स्क्रिप्ट के साथ - कोई चेतावनी नहीं) आपके लिए वीडियो साझा कर सकते हैं))) एक्सेल 2007 - बस मामले में।
पीटर एल।

ठीक है यह कोशिश करो :) दो नई कार्यपुस्तिकाएँ खोलें। उन्हें book1.xlsx और book2.xlsx के रूप में सहेजें। Book1 के सेल A1 में, "=" टाइप करें और इसे Book2 के सेल A1 को इंगित करें। Book2 के सेल A1 में कुछ टाइप करें यदि आप चाहें और फिर दोनों वर्कबुक बंद कर दें। अब अपने कोड का उपयोग करके बुक 1 खोलें और आप देखेंगे कि आपको अभी भी प्रॉम्प्ट मिल रहा है :)
सिद्धार्थ राउत

उपरोक्त एक्सर्साइज़ को चलाने से पहले, ?Application.AskToUpdateLinksतत्काल विंडो में जांचें । क्या यह पहले से ही गलत है या यह सच है ...
सिद्धार्थ रूट

2
ब्रेटडज को +1। यदि आपके सभी रिपोर्ट समान हैं) तो आपके ग्राहकों को खुश होना चाहिए)
केंसिया

22

Excel का VBA संपादक खोलें और इसे तत्काल विंडो में टाइप करें (स्क्रीनशॉट देखें)

Application.AskToUpdateLinks = False 

Excel बंद करें और फिर अपनी फ़ाइल खोलें। यह फिर से आपको संकेत नहीं देगा। जब आप कार्यपुस्तिका को बंद कर देते हैं, तो इसे रीसेट करना याद रखें, यह अन्य कार्यपुस्तिकाओं के लिए भी काम नहीं करेगा।

स्क्रीनशॉट :

यहां छवि विवरण दर्ज करें

संपादित करें

इसलिए इसे अपने कोड पर लागू करने से आपका कोड इस तरह दिखाई देगा

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

जाँच करना

सिगिल, नीचे दिया गया कोड फाइलों के साथ-साथ टूटी लिंक पर भी काम करता है। यहाँ मेरा परीक्षण कोड है।

परीक्षण की स्थितियाँ

  1. 2 नई फाइलें बनाएं। उन्हें नाम दें Sample1.xlsxऔर Sample2.xlsxउन पर बचत करेंC:\
  2. सेल A1में Sample1.xlsx, यह सूत्र लिखें='C:\[Sample2.xlsx]Sheet1'!$A$1
  3. सहेजें और दोनों फ़ाइलों को बंद करें
  4. Sample2.xlsx हटाएं !!!
  5. एक नई कार्यपुस्तिका खोलें और यह इस कोड को पेस्ट करें और चलाएं Sample। आप नोटिस करेंगे कि आपको प्रॉम्प्ट नहीं मिलेगा।

कोड

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
उस कोड ने मेरे लिए सिड ( xl2010 में ) काम किया, जिसमें उसने संदेश को निष्क्रिय कर दिया, लेकिन इसने पृष्ठभूमि में लिंक को अपडेट किया। `Set getWorkbook = Workbooks.Open (bkPath, False) का उपयोग करना चेतावनी को दबा देगा, और अपडेट को ड्राइव नहीं करेगा। ओनलो टेस्टिंग xl03 और xl10
brettdj

1
धन्यवाद डेव। :) BTW, मुझे लगता है कि आपका मतलब था xl03 और xl2007: P इसके अलावा मैंने आपके सुझाव को प्रतिबिंबित करने के लिए उपरोक्त पोस्ट को संपादित किया।
सिद्धार्थ राउत

1
@brettdj बहुत बहुत धन्यवाद! हमने उस दिन सिड के साथ एक अच्छा समय बिताया और इस मामले का पता लगाने की कोशिश कर रहे थे। तो, क्या उपरोक्त कोड किसी भी एक्सेल संस्करण के लिए सभी चेतावनियों को दबा देगा और लिंक को चुपचाप अपडेट कर देगा ? और मुझे AVOID अपडेट के लिए कोड को कैसे संशोधित करना चाहिए? क्षमा करें, मैं विकल्पों में थोड़ा खो गया हूं, लेकिन आशा है कि मैंने सभी को सही ढंग से समझाया)
पीटर एल।

@bretjj और क्या होगा अगर Application.DisplayAlerts = Falseइसे भी जोड़ा जाए?
पीटर एल।

1
@ सतर्क: आपकी कार्यपुस्तिका देखे बिना, मैं आगे टिप्पणी नहीं कर पाऊंगा। मैंने विभिन्न परिस्थितियों के साथ अपने कोड का परीक्षण किया है और यह त्रुटिपूर्ण काम करता है। वास्तव में यह उन अलर्ट को दबाने का सही तरीका है ...
सिद्धार्थ राउत

6

Excel 2016 मुझे वर्कबुक / फ़ाइल बनाते समय एक समान समस्या थी और फिर मैंने नाम बदल दिए लेकिन किसी तरह पुरानी वर्कबुक का नाम रखा गया। बहुत सारे गुगली करने के बाद ... ठीक है, वहाँ कोई अंतिम जवाब नहीं मिला ...

DATA -> Edit Link -> Startup Prompt (सबसे नीचे) पर जाएँ फिर अपने लिए सबसे अच्छा विकल्प चुनें।


3
यह सबसे अच्छा उपाय है। यह केवल उस कार्यपुस्तिका को प्रभावित करता है जिसके लिए यह विकल्प बनाया गया है और इसके लिए किसी VBA की आवश्यकता नहीं है।
गैया

5

मैं उस संकेत को दबाना चाहता था जो पूछता है कि क्या आप किसी अन्य कार्यपुस्तिका के लिंक को अपडेट करना चाहते हैं जब मेरी कार्यपुस्तिका को एक्सेल में मैन्युअल रूप से खोला गया है (जैसा कि इसे VBA के माध्यम से प्रोग्राम खोलने के लिए विरोध किया गया है)। मैंने शामिल करने की कोशिश की: Application.AskToUpdateLinks = Falseमेरी Auto_Open()मैक्रो में पहली पंक्ति के रूप में, लेकिन यह काम नहीं किया। हालांकि मुझे पता चला कि यदि आप इसे मॉड्यूल Workbook_Open()में फ़ंक्शन के बजाय रखते हैं ThisWorkbook, तो यह शानदार ढंग से काम करता है - संवाद को दबा दिया जाता है लेकिन अपडेट अभी भी पृष्ठभूमि में चुपचाप होता है।

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

अच्छा विचार; दुर्भाग्य से, इस परियोजना के लिए आवश्यक था कि मैं ऐसी कार्यपुस्तिकाओं का एक सेट खोलूँ जिनकी सामग्री मैं संशोधित नहीं कर सका। इसलिए Workbook_Open()मेरे लक्ष्य सेट में प्रत्येक कार्यपुस्तिका के लिए ईवेंट सेट करने का कोई तरीका नहीं होगा ।
sigil

3

(मेरे पास टिप्पणी जोड़ने के लिए पर्याप्त प्रतिनिधि नहीं हैं, लेकिन मैं यहां दिए गए उत्तरों पर कुछ स्पष्टता जोड़ना चाहता हूं)

Application.AskToUpdateLinks = झूठी शायद वह नहीं है जो आप चाहते हैं।

गलत पर सेट है, तो एमएस एक्सेल हैं जाएगा स्वचालित रूप से यह सिर्फ शीघ्र नहीं होगा उपयोगकर्ता पहले से, sorta जवाबी सहज ज्ञान युक्त लिंक्स को अद्यतन करने का प्रयास।

सही समाधान, यदि आप एक फ़ाइल खोलना चाह रहे हैं लिंक को अपडेट किए बिना हैं:

Workbook.Open (UpdateLinks: = 0)

संबंधित लिंक: AskToUpdateLinks = गलत और अद्यतन में अंतर: = 0


2

मुझे एक अस्थायी समाधान मिला है जो कम से कम मुझे इस काम को संसाधित करने देगा। मैंने एक छोटी AutoIt स्क्रिप्ट लिखी है जो "अपडेट लिंक" विंडो के प्रदर्शित होने की प्रतीक्षा करती है, फिर "अपडेट न करें" बटन पर क्लिक करती है। कोड इस प्रकार है:

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

अब तक यह काम कर रहा है। मैं वास्तव में एक समाधान खोजना चाहता हूं जो पूरी तरह से VBA है, हालांकि, ताकि मैं इसे एक स्टैंडअलोन एप्लिकेशन बना सकूं।


2

इस प्रश्न (या इसके भाग) को हल करने में कुछ अतिरिक्त इनपुट देने की उम्मीद है।

यह एक Excelफ़ाइल को दूसरे से खोलने के लिए काम करेगा । परिवर्तन के लिए, श्री पीटर एल। से कोड की एक पंक्ति , निम्नलिखित का उपयोग करें:

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

इसमें है MSDS। इसका प्रभाव यह है कि यह बिना किसी चेतावनी के सब कुछ (हाँ, सब कुछ) अपडेट कर देता है। यदि आप एक मैक्रो रिकॉर्ड करते हैं तो यह भी जांचा जा सकता है।

में MSDS, यह इसे संदर्भित करता है MS EXCEL 2010और 2013। मैं सोच रहा हूँ कि MS EXCEL 2016यह भी कवर किया गया है।

मेरे पास MS EXCEL 2013, और इस विषय के समान ही एक स्थिति है। इसलिए मेरे पास इवेंट कोड के Aसाथ एक फ़ाइल (इसे कॉल करें ) है Workbook_Openजो हमेशा अपडेट लिंक पर अटक जाती है । मेरे पास Bइस से जुड़ी एक और फ़ाइल (कॉल ) है, और पिवट टेबल्स मुझे फ़ाइल खोलने के लिए मजबूर करती है Aताकि डेटा मॉडल लोड किया जा सके। चूंकि मैं खोलना चाहता हूंA पृष्ठभूमि में चुपचाप फ़ाइल, मैं सिर्फ लाइन है कि मैं एक साथ ऊपर लिखा है, का उपयोग करें Windows("A.xlsx").visible = false, और, के अलावा एक बड़ा लोडिंग समय से, मैं खोलने Aसे फ़ाइल Bकोई समस्या या चेतावनी के साथ फ़ाइल, और पूरी तरह से अद्यतन ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.