मूल खुले रखने के रूप में सहेजें - एक्सेल टिप्स

विषय - सूची

एक महीने में कई बार होते हैं जहां मुझे खुद की कई प्रतियां बनाने के लिए एक्सेल वर्कबुक की आवश्यकता होती है। मैं आमतौर पर * * वर्कबुक को खोलकर एक लॉजिक बग में पहुंच जाता हूं और मैं एक सूची के माध्यम से लूप में कोड लिखना शुरू कर देता हूं और वर्कबुक की एक कॉपी को सेव करने के लिए फाइल, सेव ऐज का उपयोग करता हूं।

यहाँ फ़्लोचार्ट है:

कार्यपुस्तिका को बंद करते समय तर्क त्रुटि

क्या आप ऊपर की समस्या देखते हैं? मैक्रो वर्कबुक में चल रहा है। जब मैं इस फाइल को रीजनलएस्ट.एक्सएलएक्स के रूप में सेव करता हूं और फिर रीजनलएस्ट.एक्सएलएक्स को बंद करता हूं, तो मैक्रो चलना बंद कर देगा।

इससे पहले कि मैं समस्या देखूं मैं आमतौर पर स्यूडोकोड में गहरा हूं।

Sub MakeCopies() Dim WBT As Workbook Dim WSD As Worksheet Dim WSR As Worksheet Set WBT = ThisWorkbook Set WSD = WBT.Worksheets("Data") Set WSR = WBT.Worksheets("Report") FinalRow = WSD.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To FinalRow ' Copy this product to WSR.B2 WSR.Cells(2, 1).Value = WSD.Cells(i, 1).Value ' Save this workbook with a new name NewFN = "C:aaa " & WSD.Cells(i, 1).Value & ".xlsx" ' Save As a file type without macros WBT.SaveAs Filename:=NewFN, FileFormat:=xlOpenXMLWorkbook ' Close the new workbook ' But that won't work because I need this workbook to stay open End Sub

अगर मैं आगे की सोच रहा होता, तो मैंने दो-कार्यपुस्तिका समाधान बनाया होता। सभी मैक्रोज़ को वर्कबुक ए में रखें। सभी डेटा को कार्यपुस्तिका में रखें। कार्यपुस्तिका को बार-बार खोलें कार्यपुस्तिका, डेटा, सहेजें, बंद करें को बदलें।

थोड़ा और अधिक जटिल

जैसे-जैसे मैं बूढ़ा और कर्कश होता जा रहा हूं, मुझे लग रहा है कि मैं थोड़ा और अधिक जटिल के साथ जाने के मूड में हूं। खासकर जब से मेरे पास मूल SaveAs कमांड के लिए काम करने वाले अधिकांश कोड हैं।

आज का लेख SaveAsCopy के लिए भयानक VBA विधि के बारे में है। यह कमांड वर्कबुक ए को ओपन रखेगा और वर्कबुक ए कहलाएगा। स्थूल चलता रह सकता है। लेकिन यह वर्कबुक की वर्तमान स्थिति को वर्कबुक बी नामक एक नई बंद वर्कबुक में लिख देगा।

यह मुझे मूल प्रवाह चार्ट पर वापस जाने की अनुमति देता है:

सरल तर्क, सभी आत्म निहित

हालाँकि, मैंने SaveAsCopy के साथ एक समस्या की खोज की। जब मैं ThisWorkbook.SaveAs करता हूं, तो मैं चुन सकता हूं कि क्या मुझे XLSX या XLSM के रूप में बचाना है। अगर मुझे नई कार्यपुस्तिका में मैक्रोज़ उपलब्ध होने की आवश्यकता है, तो मैं एक्सएलएसएम का उपयोग करता हूं। अन्यथा, मैं XLSX का उपयोग करता हूं और मैक्रो गायब हो जाएगा।

दुर्भाग्य से, यदि आप एक एक्सएलएसएम कार्यपुस्तिका में हैं, तो आप सफलतापूर्वक नहीं कर सकते हैं ।SAsAsCopy और XLSX में बदलें। कोड काम करेगा। लेकिन परिणामस्वरूप कार्यपुस्तिका नहीं खुलेगी क्योंकि Excel फ़ाइल प्रकार और फ़ाइल एक्सटेंशन के बीच गलत मिलान का पता लगाता है।

मेरा समाधान XLAs के रूप में SaveAsCopy के लिए है। एक बार प्रतिलिपि सहेजे जाने के बाद, मैं कार्यपुस्तिका (मेमोरी में कार्यपुस्तिका की दो प्रतियाँ बना) खोल सकता हूं और फिर SaveAs XLSX।

Sub MakeCopies() Dim WBT As Workbook Dim WBN As Workbook Dim WSD As Worksheet Dim WSR As Worksheet Set WBT = ThisWorkbook Set WSD = WBT.Worksheets("Data") Set WSR = WBT.Worksheets("Report") FinalRow = WSD.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To FinalRow ' Copy this product to WSR.B2 WSR.Cells(2, 1).Value = WSD.Cells(i, 1).Value ' Save this workbook with a new name FN = "C:aaa " & WSD.Cells(i, 1).Value & ".xlsx" ' Save a Temp Copy of this workbook NewFN = "C:aaaDeleteMe.xlsm" ' Delete any previous copy left over from before On Error Resume Next Kill (NewFN) On Error GoTo 0 ' **************************************** ' Use SaveCopyAs instead of SaveAs WBT.SaveCopyAs Filename:=NewFN ' Open the workbook we just saved Set WBN = Workbooks.Open(NewFN) ' Delete the worksheets that we don't need Application.DisplayAlerts = False For Each WS In WBN.Worksheets Select Case WS.Name Case "BuyTheBook", "Info", "Form", "Template", "Article", "NotesForApp", "Data" WS.Delete End Select Next WS Application.DisplayAlerts = True NewFN = FN WBN.Worksheets(1).Select On Error Resume Next Kill (NewFN) On Error GoTo 0 Application.DisplayAlerts = False WBN.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook Application.DisplayAlerts = True WBN.Close False ' Delete the temporary copy NewFN = "C:aaaDeleteMe.xlsm" On Error Resume Next Kill (NewFN) On Error GoTo 0 End Sub

वीडियो देखेंा

वीडियो ट्रांसक्रिप्ट

पॉडकास्ट से एक्सेल सीखें, एपिसोड 2213: वीबीए का उपयोग करके सहेजें, लेकिन मूल ओपन रखें।

अरे, नेटकास्ट में वापस स्वागत है। मैं बिल जेलन हूं। ठीक है, आपने देखा होगा कि मैं हाल ही में प्रत्येक पॉडकास्ट को डाउनलोड करने की पेशकश कर रहा हूं क्योंकि बहुत सारे लोग मुझसे इसके लिए पूछ रहे हैं, और इसलिए मैं जीवन को यथासंभव आसान बनाने की कोशिश कर रहा था। और पूरा लक्ष्य एक कॉपी को सहेजना था जिसे आप डाउनलोड कर सकते हैं, लेकिन मैं अतिरिक्त सामान नहीं चाहता था - आप जानते हैं, सामान जो मेरे अपने आंतरिक उपयोग के लिए है - वहां, इसलिए मैं उससे छुटकारा चाहता था।

और, आप जानते हैं, चलो कहते हैं कि मुझे एक स्थिति थी जहां मुझे 12 कार्यपुस्तिकाएं लिखनी थीं, है ना? प्रत्येक एक अलग उत्पाद के साथ। इसलिए, मैं इन उत्पादों के माध्यम से लूप में जा रहा हूं और मैं इसे ए 2 में लिखने जा रहा हूं और फिर कार्यपुस्तिका को सहेजूंगा, और शायद कुछ सामान को साफ कर दूंगा। ठीक है। तो मेरा पहला यहाँ से गुजरना इस तरह से स्थूल है, ठीक है? इसलिए, हम वर्तमान कार्यपुस्तिका को परिभाषित करते हैं-- वर्कशीट ("डेटा), वर्कशीट (" रिपोर्ट ") को खोजने के लिए - और फिर यह पता लगाते हैं कि हमारे पास आज डेटा की कितनी पंक्तियाँ हैं, हम पंक्ति 2 से लूप डाउन करने जा रहे हैं। अंतिम पंक्ति, रिपोर्ट वर्कबुक पर डेटा वर्कबुक से उत्पाद की प्रतिलिपि बनाएँ।

ठीक है, और अब यहाँ है जहाँ मैं मुसीबत में हूँ। तो नई कार्यपुस्तिका को "C: aaa " कहा जा रहा है और फिर Apple.xlsx, और मैं सेव ए के रूप में जा रहा हूं, आप जानते हैं, Apple.xlsx के साथ, और XML में परिवर्तित करें- xml कार्यपुस्तिका खोलें- - जो मैक्रोज़ को बाहर कर देगा। ठीक है। लेकिन अब मैं उस कार्यपुस्तिका को बंद करना चाहूंगा, लेकिन दुर्भाग्य से जब आप एक सेव अस करते हैं - अभी देखें, मैं पॉडकास्ट 2013 में हूँ - जब मैं कोड में उस बिंदु के बाद सेव एज़ करता हूं, तो मैं नहीं अब पॉडकास्ट 2013 में होने जा रहा है; मैं Apple.xlsx में होने जा रहा हूँ। ठीक है? इसलिए, अब, यदि मैं सामान को हटाना शुरू करना चाहता हूं, तो मैं इसे कॉपी में हटाने जा रहा हूं, लेकिन जब मैं कॉपी को बंद करता हूं, तो ठीक है, मैं मूल फ़ाइल पर वापस नहीं आ सकता। ठीक है? और यह मैक्रो - वास्तव में, मेरे सिर के बारे में पता लगाने की कोशिश कर रहा है कि क्या लूप अभी भी काम करेगा या नहीं काम करेगा,सही? इसलिए मुझे लगता है कि सेव अस यहां जाने का गलत तरीका है।

ठीक है, वास्तव में, रुको। हम दो मार्गों पर जा सकते हैं: पहला, मेरे पास एक और कार्यपुस्तिका हो सकती है जो पॉडकास्ट 2213 को खोलता है, सामान करता है और फिर नए नाम के साथ बचाता है, या मैं इस तरह से जा रहा हूं, ठीक है, और यह वह तरीका है जिसे मैंने समाप्त कर दिया है का उपयोग करते हुए - ठीक है, और हम इस कार्यपुस्तिका को परिभाषित करने जा रहे हैं, लेकिन फिर एक नई कार्यपुस्तिका भी। सही। और यहां सब कुछ उसी तरह का है जब तक हम उस बिंदु तक नहीं पहुंच जाते हैं जहां मैं WBT.SaveAs करने वाला था। इसे देखें: SaveCopyAs-- अब, यह मौजूद नहीं है, जहाँ तक मैं नियमित एक्सेल में बता सकता हूँ … यह केवल VBA है। SaveCopyAs का कहना है, "अरे, देखो हम 2213 नामक एक फाइल में हैं और मैं चाहता हूं कि आप उस फ़ाइल को 2213 पर अपनी वर्तमान स्थिति में ले जाएं, और इसे डिस्क पर, और बंद करें।" मूल फ़ाइल को खुला रखें- 2213 खुली रहती है - लेकिन अब हमारे पास Apple.xlsm नामक डिस्क पर एक नई फ़ाइल है। वास्तव में, सबसे पहले, मैंने 'मी बस इसे DeleteMe.xlsm कहा जा रहा है। ठीक है। लेकिन यह एक समान प्रतिलिपि बनाता है और मूल फ़ाइल रखता है - वह फ़ाइल जो मैक्रो में चल रही है - खुली है, और यह महत्वपूर्ण हिस्सा है, है ना? तो अब जब मेरे पास DeleteMe है, तो मैं इसे खोलता हूं, इसे WBN को असाइन करता हूं, मुझे जो चीजें करने की जरूरत है, वे करें, सभी अतिरिक्त शीट से छुटकारा पाएं- मुझे पता है कि मेरे पास क्या है। ध्यान दें, चादरों को हटाने से पहले, आप DisplayAlerts = False करना चाहते हैं, अन्यथा यह आपसे पूछता रहता है, "अरे, आप शीट वापस लेने नहीं जा रहे हैं।" मैं समझ गया। और फिर, यहाँ अंत में, पहले वर्कशीट का चयन करें FN Apple.xlsx होने जा रहा है, और फिर हम एक ओपन XMLWorkbook के रूप में WBN.SaveAs Apple कर सकते हैं। कोई मैक्रोज़ नहीं। और फिर क्लोज़-- क्लोज़ के बारे में सुंदर बात यह है कि मैं अब इस कार्यपुस्तिका, 2213 में वापस आ गया हूं।लेकिन यह एक समान प्रतिलिपि बनाता है और मूल फ़ाइल रखता है - वह फ़ाइल जो मैक्रो में चल रही है - खुली है, और यह महत्वपूर्ण हिस्सा है, है ना? तो अब जब मेरे पास DeleteMe है, तो मैं इसे खोलता हूं, इसे WBN को असाइन करता हूं, मुझे जो चीजें करने की जरूरत है, वे करें, सभी अतिरिक्त शीट से छुटकारा पाएं- मुझे पता है कि मेरे पास क्या है। ध्यान दें, चादरों को हटाने से पहले, आप DisplayAlerts = False करना चाहते हैं, अन्यथा यह आपसे पूछता रहता है, "अरे, आप शीट वापस लेने नहीं जा रहे हैं।" मैं समझ गया। और फिर, यहाँ अंत में, पहले वर्कशीट का चयन करें FN Apple.xlsx होने जा रहा है, और फिर हम एक ओपन XMLWorkbook के रूप में WBN.SaveAs Apple कर सकते हैं। कोई मैक्रोज़ नहीं। और फिर क्लोज़-- क्लोज़ के बारे में सुंदर बात यह है कि मैं अब इस कार्यपुस्तिका, 2213 में वापस आ गया हूं।लेकिन यह एक समान प्रतिलिपि बनाता है और मूल फ़ाइल रखता है - वह फ़ाइल जो मैक्रो में चल रही है - खुली है, और यह महत्वपूर्ण हिस्सा है, है ना? इसलिए अब मेरे पास DeleteMe है, मैं इसे खोलता हूं, इसे WBN को असाइन करता हूं, मुझे जो चीजें करने की जरूरत है, वे करें, सभी अतिरिक्त शीट से छुटकारा पाएं- मुझे पता है कि मेरे पास क्या है। ध्यान दें, चादरों को हटाने से पहले, आप DisplayAlerts = False करना चाहते हैं, अन्यथा यह आपसे पूछता रहता है, "अरे, आप शीट वापस लेने नहीं जा रहे हैं।" मैं समझ गया। और फिर, यहाँ अंत में, पहले वर्कशीट का चयन करें FN Apple.xlsx होने जा रहा है, और फिर हम एक ओपन XMLWorkbook के रूप में WBN.SaveAs Apple कर सकते हैं। कोई मैक्रोज़ नहीं। और फिर क्लोज़-- क्लोज़ के बारे में सुंदर बात यह है कि मैं अब इस कार्यपुस्तिका, 2213 में वापस आ गया हूं।सही? तो अब जब मेरे पास DeleteMe है, तो मैं इसे खोलता हूं, इसे WBN को असाइन करता हूं, मुझे जो चीजें करने की जरूरत है, वे करें, सभी अतिरिक्त शीट से छुटकारा पाएं- मुझे पता है कि मेरे पास क्या है। ध्यान दें, चादरों को हटाने से पहले, आप DisplayAlerts = False करना चाहते हैं, अन्यथा यह आपसे पूछता रहता है, "अरे, आप शीट वापस लेने नहीं जा रहे हैं।" मैं समझ गया। और फिर, यहाँ अंत में, पहले वर्कशीट का चयन करें FN Apple.xlsx होने जा रहा है, और फिर हम एक ओपन XMLWorkbook के रूप में WBN.SaveAs Apple कर सकते हैं। कोई मैक्रोज़ नहीं। और फिर क्लोज़-- क्लोज़ के बारे में सुंदर बात यह है कि मैं अब इस कार्यपुस्तिका, 2213 में वापस आ गया हूं।सही? इसलिए अब मेरे पास DeleteMe है, मैं इसे खोलता हूं, इसे WBN को असाइन करता हूं, मुझे जो चीजें करने की जरूरत है, वे करें, सभी अतिरिक्त शीट से छुटकारा पाएं- मुझे पता है कि मेरे पास क्या है। ध्यान दें, चादरों को हटाने से पहले, आप DisplayAlerts = False करना चाहते हैं, अन्यथा यह आपसे पूछता रहता है, "अरे, आप शीट वापस लेने नहीं जा रहे हैं।" मैं समझ गया। और फिर, यहाँ अंत में, पहले वर्कशीट का चयन करें FN Apple.xlsx होने जा रहा है, और फिर हम एक ओपन XMLWorkbook के रूप में WBN.SaveAs Apple कर सकते हैं। कोई मैक्रोज़ नहीं। और फिर क्लोज़-- क्लोज़ के बारे में सुंदर बात यह है कि मैं अब इस कार्यपुस्तिका, 2213 में वापस आ गया हूं।शीट वापस नहीं लेने जा रहा। "मैं इसे प्राप्त करता हूं। और फिर, अंत में यहां, पहले वर्कशीट का चयन करें FN Apple.xlsx होने जा रहा है, और फिर हम WBN.SaveAs Apple को एक ओपन XMLWorkbook के रूप में कर सकते हैं। कोई मैक्रोज़ नहीं। .और फिर क्लोज़-- क्लोज़ के बारे में सुंदर बात यह है कि मैं अब इस कार्यपुस्तिका, 2213 में वापस आ गया हूं।शीट वापस नहीं लेने जा रहा। "मैं इसे प्राप्त करता हूं। और फिर, अंत में, यहां पहले वर्कशीट का चयन करें FN Apple.xlsx होने जा रहा है, और फिर हम WBN.SaveAs Apple को एक ओपन XMLWorkbook के रूप में कर सकते हैं। कोई मैक्रोज़ नहीं। .और फिर क्लोज़-- क्लोज़ के बारे में सुंदर बात यह है कि मैं अब इस कार्यपुस्तिका, 2213 में वापस आ गया हूं।

ठीक है, यह वास्तव में अच्छी तरह से काम कर रहा है, और इस पूरी चीज़ की कुंजी है SaveCopyAs-- SaveCopyAs। तो, मेरे लिए - अच्छी तरह से यह एक लंबे समय के लिए आसपास रहा है - मैंने इसका इस्तेमाल कभी नहीं किया, और अब मुझे एहसास हुआ कि शायद अतीत में बहुत बार ऐसा हुआ है जहां मुझे इसका इस्तेमाल करना चाहिए था। और हो सकता है, आप जानते हों, आपको इसका उपयोग करना चाहिए या इसका उपयोग करने पर भी विचार करना चाहिए।

ठीक है, मैं एक बात का उल्लेख करना भूल गया: महत्वपूर्ण बात यह है कि Save As Copy - Save As Copy- तो जब मैं Save As Copy करता हूं, अगर मैं एक xslx फाइल प्रकार में बदलने की कोशिश करता हूं, तो मैं फ़ाइल नहीं बदल सकता यहाँ केवल NewFN में एक्सटेंशन बदलकर टाइप करें और जब बाद की कार्यपुस्तिका को खोलने का प्रयास किया जाता है, तो वे यह पता लगाएंगे कि इसमें मैक्रोज़ हैं, और इसमें गलत एक्सटेंशन है, और यह आप पर चिल्लाएगा। सही? तो, आपको इसे xlsm के रूप में सहेजना होगा और फिर बाद में वापस आना होगा, इसे फिर से खोलना होगा और इसे xlsx के रूप में सहेजना होगा। लेकिन यह सभी इस मैक्रो के साथ काम करता है।

इसलिए, हे, जब मैं इस पुस्तक को अपडेट कर रहा हूं, तो एक्सेल २०१६, इस साल गर्मियों में, एक्सेल २०१ ९ के लिए, मैं इस टिप को शामिल करना सुनिश्चित करूँगा। मुझे लगता है कि यह SaveCopyAs के लिए एक उपयोगी टिप है।

आज से लपेटें: आप चाहते हैं कि VBA वर्तमान कार्यपुस्तिका की कई प्रतियां लिखें; सहेजें के रूप में समस्याएँ पैदा करता है क्योंकि मूल कार्यपुस्तिका अब खुली नहीं है; इसके बजाय आप उपयोग करते हैं। कार्यपुस्तिका की एक प्रति सहेजने के लिए .SAsAsCopy। यदि आप मैक्रो सहित आज के वीडियो से कार्यपुस्तिका डाउनलोड करना चाहते हैं, तो YouTube विवरण में URL पर जाएं।

मैं आपको रोकना चाहता हूं, मैं आपको अगली बार एक और नेटकास्ट से देखूंगा।

एक्सेल फ़ाइल डाउनलोड करें

एक्सेल फाइल को डाउनलोड करने के लिए: save-as-keep-original-open.xlsm

एक्सेल थॉट्स ऑफ द डे

मैंने अपने एक्सेल के बारे में सलाह के लिए अपने एक्सेल मास्टर दोस्तों से पूछा है। विचार करने के लिए आज का विचार:

"दिनांक संख्याएं हैं, शब्द नहीं।"

दुआने औबिन

दिलचस्प लेख...