2012-06-08 14 views
16

पहली बार पोस्टर, इसलिए यदि कोई स्वरूपण है, या दिशानिर्देश मैं पालन करने में असफल रहा, तो कृपया मुझे बताएं ताकि मैं इसे ठीक कर सकूं।वीबीए त्रुटि 1004 - रेंज क्लास का चयन विधि

इसलिए मैं मूल रूप से एक्सेल फ़ाइल की फ़ाइल निर्देशिका के लिए उपयोगकर्ता से पूछ रहा हूं, फिर मैं कुछ चर सेट करता हूं (मूल रूप से प्रोजेक्ट वैरिएबल के रूप में सार्वजनिक रूप से सेट किया जाता है, क्योंकि इनका उपयोग किया जा रहा था और अन्य स्थानों में बदला गया था)। मैंने इन चरों को कुछ भी सेट करने के लिए लाइन भी जोड़ दी हैं (बस अगर मुझे नहीं लगता कि इससे कोई फर्क नहीं पड़ता)। मैं फिर इन चर को एक्सेल फ़ाइल, कार्यपुस्तिका, और चादरों में सेट करता हूं जिन्हें मैं एक्सेस करना चाहता हूं।

Dim filepath as String 
filePath = CStr(fileDialog)    'ask file dir, set to string 
Dim sourceXL As Variant     'these three were orig project variables 
Dim sourceBook As Variant 
Dim sourceSheet As Variant 
Dim sourceSheetSum As Variant 

Set sourceXL = Nothing     'set to nothing in case...? 
Set sourceBook = Nothing 
Set sourceSheet = Nothing 
Set sourceSheetSum = Nothing 

Set sourceXL = Excel.Application   'set to the paths needed 
Set sourceBook = sourceXL.Workbooks.Open(filePath) 
Set sourceSheet = sourceBook.Sheets("Measurements") 
Set sourceSheetSum = sourceBook.Sheets("Analysis Summary") 

Dim measName As Variant     'create variable to access later 
Dim partName As Variant 

sourceSheetSum.Range("C3").Select   'THIS IS THE PROBLEM LINE 

measName = sourceSheetSum.Range(Selection, Selection.End(xlDown)).Value 
sourceSheetSum.Range("D3").Select 
partName = sourceSheetSum.Range(Selection, Selection.End(xlDown)).Value 

तो मैं दो अलग-अलग शीट चर 'sourceSheets' और 'sourceSheetsSum' बनाया, कोड काम करता है अगर मैं 'sourceSheets' का उपयोग, लेकिन त्रुटि 1004 होती है, तो मैं 'sourceSheetsSum' का उपयोग करें। मैंने किसी भी कारण से 'स्रोतशीटसम' ओवरराइड कर रहे थे, तो वैरिएबल 'स्रोतशीट' के साथ कोड को पूरी तरह से हटा दिया है।

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

For j = 1 To sourceBook.Sheets.Count 
Debug.Print (Sheets(j).name) 
Next j 

माप की डिबग आउटपुट के साथ


विश्लेषण सारांश
विश्लेषण सेटिंग

तो, किसी को भी किसी भी विचार क्या इस त्रुटि का अर्थ हो सकता है, या कैसे करता है मैं कर सकते हैं संभवतः त्रुटि के बारे में और जानने के बारे में अधिक जानकारी प्राप्त करें?

संपादित करें: इसलिए मैंने शीट नामों की सूची में थोड़ा सा जोड़ने का फैसला किया, यह सुनिश्चित नहीं है कि इससे मदद मिलेगी या नहीं।

For j = 1 To sourceBook.Sheets.Count 
    listSheet(j) = Sheets(j).name 
Next j  
Debug.Print (listSheet(2))  
Set sourceSheetSum = sourceBook.Sheets(listSheet(2)) 

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

deusxmach1na: मुझे लगता है कि तुम मुझे

Dim sourceXL As Variant     
Dim sourceBook As Variant 
Dim sourceSheet As Variant 
Dim sourceSheetSum As Variant 

Set sourceSheet = sourceBook.Sheets("Measurements") 

बदलने के लिए करने के लिए

Dim sourceXL As Excel.Application 
Dim sourceBook As Excel.Workbook 
Dim sourceSheet As Worksheet 
Dim sourceSheetSum As Worksheet 

Set sourceSheet = sourceBook.Worksheets("Measurements") 

लेकिन इस त्रुटि नहीं बदलता है चाहता था, मुझे याद है कि मैं इसे के समान था, और तब से इसे बदल मैंने पढ़ा है कि संस्करण कैच की तरह है, वास्तव में यह वास्तव में ठोस नहीं है।

+1

मैं आपकी चादरें विशेष रूप से वर्कशीट्स के रूप में मंद कर दूंगा और देखें कि क्या होता है। 'वर्कशीट के रूप में मंद स्रोतशीटसम' असल में, आप सब कुछ अधिक विशिष्टता के साथ मंद करना चाहते हैं। – deusxmach1na

उत्तर

23

आप सीमा का चयन करने से पहले शीट का चयन करना होगा।

मैंने समस्या को अलग करने के लिए उदाहरण को सरल बना दिया है। इसे आज़माएं:

Option Explicit 


Sub RangeError() 

    Dim sourceBook As Workbook 
    Dim sourceSheet As Worksheet 
    Dim sourceSheetSum As Worksheet 

    Set sourceBook = ActiveWorkbook 
    Set sourceSheet = sourceBook.Sheets("Sheet1") 
    Set sourceSheetSum = sourceBook.Sheets("Sheet2") 

    sourceSheetSum.Select 

    sourceSheetSum.Range("C3").Select   'THIS IS THE PROBLEM LINE 

End Sub 

शीट 1 और शीट 2 को अपने शीट नामों से बदलें।

महत्वपूर्ण नोट: वेरिएंट का उपयोग करना खतरनाक है और मुश्किल से मारने वाली बग का कारण बन सकता है।उनका उपयोग केवल तभी करें जब आपके पास ऐसा करने का एक बहुत ही विशिष्ट कारण है।

+0

मुझे विश्वास नहीं है कि आप मुझे 2 घंटे पुराने प्रश्न पर 13 सेकेंड से हराते हैं! गति के लिए +1 ;-) – assylias

+0

अच्छा! स्टैक ओवरफ्लो एक्सेल हेल्प डेस्क व्यवसाय के लिए खुला है! –

+2

@HeadofCatering अच्छा कॉल! मैंने कभी भी चयन का उपयोग नहीं किया और भूल गया कि आपको पहले शीट का चयन करना होगा। श्वास, अच्छा ओल 'मैक्रो रिकॉर्ड कोड। – deusxmach1na

7

आप पहली बार चादर उस में है चयनित किए बिना एक श्रेणी का चयन नहीं कर सकते पहले पत्रक का चयन और अगर आप अभी भी समस्या मिल देखने के लिए प्रयास करें:।

sourceSheetSum.Select 
sourceSheetSum.Range("C3").Select 
+0

+1। –

+0

+ 1 जैसा कि आपने इसे एक ही समय में किया था :) –

3

assylias और खानपान के प्रमुख पहले से ही है आपके कारण को दिया गया है कि त्रुटि क्यों हो रही है।

अब के बारे में आप क्या कर रहे, से मैं क्या समझ, आप सभी

मुझे लगता है कि आप VBA PowerPoint से यह कर रहे हैं पर Select उपयोग करने की आवश्यकता नहीं है? यदि हां, तो आपका कोड

Dim sourceXL As Object, sourceBook As Object 
Dim sourceSheet As Object, sourceSheetSum As Object 
Dim lRow As Long 
Dim measName As Variant, partName As Variant 
Dim filepath As String 

filepath = CStr(FileDialog) 

'~~> Establish an EXCEL application object 
On Error Resume Next 
Set sourceXL = GetObject(, "Excel.Application") 

'~~> If not found then create new instance 
If Err.Number <> 0 Then 
    Set sourceXL = CreateObject("Excel.Application") 
End If 
Err.Clear 
On Error GoTo 0 

Set sourceBook = sourceXL.Workbooks.Open(filepath) 
Set sourceSheet = sourceBook.Sheets("Measurements") 
Set sourceSheetSum = sourceBook.Sheets("Analysis Summary") 

lRow = sourceSheetSum.Range("C" & sourceSheetSum.Rows.Count).End(xlUp).Row 
measName = sourceSheetSum.Range("C3:C" & lRow) 

lRow = sourceSheetSum.Range("D" & sourceSheetSum.Rows.Count).End(xlUp).Row 
partName = sourceSheetSum.Range("D3:D" & lRow) 
+0

हाय मुझे एक संबंधित समस्या है (अपहरण के लिए खेद है)। मैं कुछ कोड दोबारा कर रहा हूं और इसे शीट से मॉड्यूल में ले जा रहा हूं। यह 'वर्कशीट्स (नाम) का उपयोग कर वर्कशीट तक पहुंचता है .ेंज'। इससे पहले कि मैं इसे मॉड्यूल में ले जाया गया, यह चयन के बिना ठीक काम करता था। अब मुझे इसे काम करने के लिए 'वर्कशीट। चयन करें' लाइन जोड़ने की ज़रूरत है, यह मुझे '1004' 'देता है। कुछ मामलों में भी यह काम नहीं करता है। किसी भी विचार से कोड को स्थानांतरित करने से समस्या उत्पन्न हुई और लाइन को दस लाख बार जोड़ने के बिना इसे कैसे हल किया जाए। क्षमा करें मैं एक वीबीए नौसिखिया हूँ। – DPD

+0

@DPD: Yup ... इस लिंक को देखें;) http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using- चयन करें –

+0

धन्यवाद! यही वही था जो मुझे चाहिए था। दोनों उत्तरों का समर्थन किया। – DPD

0

प्रतिलिपि बनाने से पहले प्रतिलिपि को चुनने से पहले चयन करें। पदों के लिए धन्यवाद।

संबंधित मुद्दे