रन-टाइम एरर 1004 Microsoft Visual Basic से संबंधित एक त्रुटि कोड है जो Microsoft Excel उपयोगकर्ताओं को प्रभावित करने के लिए जाना जाता है। यह त्रुटि Excel 2003 और Excel 2007 पर सबसे अधिक प्रचलित होने के लिए जानी जाती है, हालांकि Microsoft के कंप्यूटर के लिए लोकप्रिय वर्कशीट एप्लिकेशन का कोई भी संस्करण रन-टाइम एरर 1004 के खतरे से सुरक्षित नहीं है। ज्यादातर मामलों में, इस समस्या से प्रभावित उपयोगकर्ता रन-टाइम एरर 1004 के दो अलग-अलग रूपों में से एक देखते हैं। उनकी संपूर्णता में, रन-टाइम एरर 1004 के दो रूप पढ़ते हैं:
"Run-time error '1004':
Copy Method of Worksheet Class failed"
"Run-time error '1004':
Application-defined or object-defined error"

आप जो सटीक त्रुटि संदेश देखते हैं, वह कुछ मामलों में थोड़ा भिन्न भी हो सकता है, हालांकि त्रुटि कोड वही रहेगा। चाहे आप समस्या के किस संस्करण का अनुभव करें, हालांकि, यह लगभग हमेशा Excel में एक मैक्रो चलाते समय होता है जिसे वर्कशीट को कॉपी करने और फिर मूल वर्कशीट के समान वर्कबुक में कॉपी रखने के लिए डिज़ाइन किया गया है।
सबसे खराब तकनीकी समस्याओं के विपरीत, Microsoft Excel के संदर्भ में रन-टाइम एरर 1004 का कारण ज्ञात है। रन-टाइम एरर 1004 तब होता है जब आप जो मैक्रो चला रहे हैं वह मूल वर्कशीट को एक परिभाषित नाम वाले वर्कबुक में कॉपी कर रहा होता है जिसे आपने मैक्रो चलाने से पहले सेव और क्लोज नहीं किया था। ऐसे मैक्रो का एक उदाहरण निम्नलिखित कोड में देखा जा सकता है:
Sub CopySheetTest() Dim iTemp As Integer Dim oBook As Workbook Dim iCounter As Integer ' Create a new blank workbook: iTemp = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Set oBook = Application.Workbooks.Add Application.SheetsInNewWorkbook = iTemp ' Add a defined name to the workbook ' that RefersTo a range: oBook.Names.Add Name:="tempRange", _ RefersTo:="=Sheet1!$A$1" ' Save the workbook: oBook.SaveAs "c:\test2.xls" ' Copy the sheet in a loop. Eventually, ' you get error 1004: Copy Method of ' Worksheet class failed. For iCounter = 1 To 275 oBook.Worksheets(1).Copy After:=oBook.Worksheets(1) Next End Sub
चूंकि Microsoft Excel के संदर्भ में रन-टाइम एरर 1004 का कारण ज्ञात है, इसलिए इसका समाधान भी है। इस समस्या के समाधान के अलावा, प्रभावित उपयोगकर्ताओं के लिए एक वर्कअराउंड भी उपलब्ध है जिसका उपयोग उस स्थिति में किया जा सकता है जब समाधान काम न करे या वे समाधान को व्यवहार्य विकल्प न पाएं।
समाधान:
इस विशिष्ट समस्या का समाधान केवल आपके द्वारा चलाए जा रहे मैक्रो के कोड को संपादित करना है ताकि यह वर्कशीट की कॉपी बनाते समय समय-समय पर टार्गेट वर्कबुक को सेव और क्लोज करे। ऐसा करने वाले मैक्रो का कोड निम्नलिखित जैसा दिखेगा:
Sub CopySheetTest() Dim iTemp As Integer Dim oBook As Workbook Dim iCounter As Integer ' Create a new blank workbook: iTemp = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Set oBook = Application.Workbooks.Add Application.SheetsInNewWorkbook = iTemp ' Add a defined name to the workbook ' that RefersTo a range: oBook.Names.Add Name:="tempRange", _ RefersTo:="=Sheet1!$A$1" ' Save the workbook: oBook.SaveAs "c:\test2.xls" ' Copy the sheet in a loop. Eventually, ' you get error 1004: Copy Method of ' Worksheet class failed. For iCounter = 1 To 275 oBook.Worksheets(1).Copy After:=oBook.Worksheets(1) 'Uncomment this code for the workaround: 'Save, close, and reopen after every 100 iterations: If iCounter Mod 100 = 0 Then oBook.Close SaveChanges:=True Set oBook = Nothing Set oBook = Application.Workbooks.Open("c:\test2.xls") End If Next End Sub
नोट: वर्कशीट की कॉपी बनाने की सटीक संख्या जिसे आपको वर्कबुक को सेव और क्लोज करने से पहले करने की आवश्यकता है, एक मामले से दूसरे मामले में भिन्न होती है क्योंकि यह आपके द्वारा कॉपी की जा रही वर्कशीट के आकार पर निर्भर करता है।
वर्कअराउंड:
जैसा कि पहले कहा गया है, इस विशिष्ट समस्या का एक वर्कअराउंड भी मौजूद है। इस समस्या को दूर करना मौजूदा वर्कशीट की कॉपी बनाने के बजाय टेम्पलेट से एक नई वर्कशीट डालने का एक सरल मामला है। यदि आप इस समस्या को दूर करना चाहते हैं, तो यहां आपको क्या करना होगा:
- Excel लॉन्च करें।
- एक नया वर्कबुक बनाएं, और उस वर्कबुक में मौजूद हर एक वर्कशीट को हटाएं सिवाय एक के।

- फॉर्मेट करें वर्कबुक को।
- उस टेक्स्ट, डेटा और/या चार्ट को जोड़ें जिन्हें आप डिफ़ॉल्ट रूप से टेम्पलेट में रखना चाहते हैं, उस एकमात्र वर्कशीट में जो वर्कबुक में अब है।
- यदि आप Excel 2003 या उससे पहले का उपयोग कर रहे हैं, तो File > Save As पर क्लिक करें। यदि आप Excel 2007 या बाद का उपयोग कर रहे हैं, तो दूसरी ओर, Microsoft Office बटन पर क्लिक करें और फिर Save As पर क्लिक करें।

- File name: फ़ील्ड में, जो भी आप टेम्पलेट को कॉल करना चाहते हैं उसे टाइप करें।
- Save as type: फ़ील्ड के बगल में ड्रॉपडाउन मेनू खोलें और Excel Template (.xlt) पर क्लिक करें यदि आप Excel 2003 या उससे पहले का उपयोग कर रहे हैं, या Excel Template (.xltx) यदि आप Excel 2007 या बाद का उपयोग कर रहे हैं इसे चुनने के लिए।

- Save पर क्लिक करें।

- एक बार जब आप सफलतापूर्वक टेम्पलेट बना लेते हैं, तो आप इसे प्रोग्रामेटिक रूप से निम्नलिखित कोड लाइन का उपयोग करके डाल सकते हैं:
Sheets.Add Type:=path\filename
नोट: ऊपर वर्णित कोड लाइन में, path\filename को आपके द्वारा अभी बनाए गए शीट टेम्पलेट के स्थान के पूर्ण पथ (पूर्ण फ़ाइल नाम सहित) से बदलने की आवश्यकता है।