2013-04-18 5 views
5

कॉपी करने का प्रयास करते समय ऑब्जेक्ट आवश्यक है, मैं एक टेक्स्ट बॉक्स की सामग्री को workbook से दूसरे में कॉपी करने का प्रयास कर रहा हूं। मुझे पहलेसे सेल मानों की प्रतिलिपि बनाने में कोई समस्या नहीं है, लेकिन जब मैं टेक्स्ट बॉक्स की प्रतिलिपि बनाने का प्रयास करता हूं तो मुझे object required त्रुटि मिलती है। यह macro कार्यपुस्तिका से चलाया जा रहा है जिसमें डेटा कॉपी किया गया है। Excel 2007 का उपयोग कोड:एक्सेल वीबीए रन-टाइम त्रुटि '424': टेक्स्टबॉक्स

Sub UploadData() 
    Dim xlo As New Excel.Application 
    Dim xlw As New Excel.Workbook 
    Set xlw = xlo.Workbooks.Open("c:\myworkbook.xlsx") 
    xlo.Worksheets(1).Cells(2, 1) = Range("d4").Value 'Copy cell content (this works fine) 
    xlo.Worksheets(1).Cells(2, 2) = TextBox1.Text 'This gives me the object required error 
    xlw.Save 
    xlw.Close 
    Set xlo = Nothing 
    Set xlw = Nothing 
End Sub 

किसी भी मदद के लिए धन्यवाद।

+0

पूर्ण Application.ActiveWorkbook.ActiveSheet.TextBox1 साथ करने की कोशिश की इस की जगह? क्या आप जांच सकते हैं कि ActiveWorkbook/ActiveSheet xlw नहीं है या नहीं? यदि ऐसा है, तो आपको किसी अन्य को खोलने से पहले अपने सक्रिय दस्तावेज़ के लिए ऑब्जेक्ट सेट करना होगा। – dnLL

+0

इस '... = activesheet.TextBox1.Object.value' या' .Text' प्रॉपर्टी को अंत में भी काम करना चाहिए –

+0

मुझे एक 'ऑब्जेक्ट इस संपत्ति या विधि का समर्थन नहीं करता है' आपके समाधानों में से किसी एक के साथ डीएनएलएल & KazJaw –

उत्तर

4

अपने मैक्रो के साथ समस्या यह है कि एक बार आप अपने गंतव्य वर्कबुक (xlw अपने कोड नमूने में) खोला है, यह ActiveWorkbook वस्तु के रूप में सेट कर दिया जाता है और आप कोई त्रुटि मिलती है क्योंकि TextBox1 मौजूद नहीं है उस विशिष्ट कार्यपुस्तिका में। इस समस्या को हल करने के लिए, आप किसी अन्य को खोलने से पहले अपने वास्तविक कार्यपुस्तिका पर संदर्भ ऑब्जेक्ट को परिभाषित कर सकते हैं।

Sub UploadData() 
    Dim xlo As New Excel.Application 
    Dim xlw As New Excel.Workbook 
    Dim myWb as Excel.Workbook 

    Set myWb = ActiveWorkbook 
    Set xlw = xlo.Workbooks.Open("c:\myworkbook.xlsx") 
    xlo.Worksheets(1).Cells(2, 1) = myWb.ActiveSheet.Range("d4").Value 
    xlo.Worksheets(1).Cells(2, 2) = myWb.ActiveSheet.TextBox1.Text 

    xlw.Save 
    xlw.Close 
    Set xlo = Nothing 
    Set xlw = Nothing 
End Sub 

आप चाहें, तो आप भी myWb.Activate सक्रिय रूप में अपने मुख्य वर्कबुक वापस डाल करने के लिए इस्तेमाल कर सकते हैं। यदि आप इसे वर्कशीट ऑब्जेक्ट के साथ करते हैं तो यह भी काम करेगा। एक या दूसरे का उपयोग करना आप जो करना चाहते हैं उस पर निर्भर करता है (यदि एकाधिक चादरें हैं, आदि)।

1

मुझे लगता है कि यह हो रहा है क्योंकि यह कारण हो सकता है क्योंकि TextBox1 वीबीए मॉड्यूल और इसकी संबंधित शीट को स्कॉइंग कर रहा है, जबकि रेंज "सक्रिय शीट" पर जा रही है।

संपादित

ऐसा लगता है कि आप कार्यपुस्तिका से पाठ बॉक्स को खींचने के लिए GetObject समारोह उपयोग करने में सक्षम हो सकता है।

+0

कोई विचार है कि मैं सक्रिय शीट में टेक्स्टबॉक्स 1 को कैसे बढ़ा सकता हूं? मुझे विश्वास नहीं है कि मैं ActiveSheet का उपयोग कर सकता हूं। टेक्स्टबॉक्स 1 –

+0

इसे एक टिप्पणी के रूप में पोस्ट किया जाना चाहिए था, जवाब नहीं। – dnLL

+0

@ डीएनएलएल क्यों? यह एक जवाब है, टिप्पणी या प्रश्न नहीं। यह आपके उत्तर के रूप में बिल्कुल सही नहीं है, लेकिन यह एक उत्तर है [परिभाषा के अनुसार] (http://meta.stackexchange.com/questions/118582/what-is-an- अस्वीकार्य-answer)। –

0

मुद्दा इस लाइन

xlo.Worksheets(1).Cells(2, 2) = TextBox1.Text 

तो टेक्स्ट बॉक्स कुछ अन्य स्थान जिसे आप यहां उपयोग नहीं कर रहे पर परिभाषित किया गया है के साथ है। एक्सेल वर्तमान पाठ में टेक्स्टबॉक्स ऑब्जेक्ट नहीं ढूंढ पा रहा है, जबकि इस टेक्स्टबॉक्स को xlw में परिभाषित किया गया था।

इसलिए साथ

xlo.Worksheets(1).Cells(2, 2) = worksheets("xlw").TextBox1.Text