2015-01-07 9 views
6

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

मेरे पास एक फ़ाइल है जो मुझे हर सप्ताह मिलती है। इस फ़ाइल की संरचना हमेशा एक ही है: आईडी, नाम, दिनांक, 1 और 4 के बीच मान, गैर-प्रासंगिक डेटा।

यह डेटा 'सभी का चयन करें' बटन (वर्कशीट के शीर्ष बाएं कोने, एमएस एक्सेल 2013 में सेलनाम के नीचे थोड़ा त्रिकोण) के माध्यम से चुना जाता है और फिर दूसरी डिफ़ॉल्ट फ़ाइल में कॉपी किया जाता है जो डेटा को दिखाने और फ़िल्टर करने के लिए पुन: कार्य करता है 1-4 मूल्य और तिथि के आधार पर विभिन्न चादरें।

मेरा प्रश्न: डेटा का पता/चिपकाया जा रहा है जब मैं कैसे पता लगा सकता हूं? मैंने वर्कशीट की कोशिश की है। चेंज इवेंट, लेकिन पेस्ट कमांड (CTRL + V) चेंज इवेंट ट्रिगर नहीं करता है। इसके अलावा, डेटा की प्रतिलिपि कैसे बनाई जाएगी? क्या यह पंक्ति द्वारा पंक्ति को अद्यतन करेगा, सेल द्वारा सेल (कौन सी दिशा), ...? मुझे पता है कि कॉपी कॉपी कमांड का पता लगाने के बाद मैं इसे अंतिम प्रश्न का उत्तर आसानी से ढूंढ सकता हूं, लेकिन आप कभी नहीं जानते कि कोई जवाब जानता है या नहीं।

क्या ऐसा करने के लिए कोई और अधिक आसान (या बेहतर) तरीका है?

यदि आवश्यक हो तो अधिक डेटा और जानकारी दी जा सकती है।

आपकी मदद के लिए धन्यवाद।

संपादित करें: '... की प्रतिलिपि बनाई जा रही है?' इसे चिपकाया जाना चाहिए जैसा कि यह होना चाहिए था।

+0

आप क्यों जानना चाहेंगे कि डेटा कॉपी किया गया है या नहीं? क्या कोई विशिष्ट कारण है? आपकी क्या प्राप्त करने की इच्छा है? क्या आप इस डेटा को किसी अन्य कार्यपुस्तिका/वर्कशीट में पॉप्युलेट करना चाहते हैं? –

+0

क्या आपने इसे देखा है: http://www.siddharthrout.com/2011/08/15/vba-excelallow-paste-special-only/? –

+0

@MaciejLos कारण यह है कि फाइल का उपयोग करने वाले लोग हर हफ्ते डेटा की एक बड़ी सूची प्राप्त करते हैं। वे इस सूची को उस फ़ाइल के पहले वर्कशीट में पेस्ट करेंगे जो मैं वर्तमान में काम कर रहा हूं और मुझे फ़ाइल को आवश्यक डेटा को फ़िल्टर करने और प्रति पंक्तियों के कुछ मूल्यों के आधार पर अन्य वर्कशीट्स में प्रदर्शित करने की आवश्यकता है। आरई: आपकी दूसरी टिप्पणी: मैंने इसे अपने ब्रेक से पहले खोला था, लेकिन इसे पढ़ना समाप्त नहीं किया था। मैं वर्तमान में इसे आजमा रहा हूं और ऐसा लगता है कि मैं क्या चाहता हूं। यदि उत्तर देता है तो उत्तर पोस्ट करेगा। – Nahbyr

उत्तर

8
Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim UndoList As String 

    '~~> Get the undo List to capture the last action performed by user 
    UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1) 

    '~~> Check if the last action was not a paste nor an autofill 
    If Left(UndoList, 5) = "Paste" Then 
    'Do stuff 
    End If 
End Sub 

यह चाल किया था। उन लोगों के लिए जिन्हें कुछ समान की आवश्यकता है और उनकी सूची का आकार @ मासीजलोस का जवाब भी काम करेगा।

1

वर्कशीट_Change यदि आप सेल में सूत्र जोड़ते हैं तो ईवेंट नौकरी करेगा जो कभी ओवरराइट नहीं किया जाएगा। मान लें कि आपका डेटा ए 1 सेल में चिपकाया गया है और 5 कॉलम पर कब्जा कर लिया गया है। तो, 6. स्तंभ में सूत्र नीचे दर्ज करें और पंक्ति 1.

=COUNTBLANK(A1:A1048576) 

अब, आप को संभाल/पेस्ट घटना का पता लगाने कर सकते हैं;)

+0

यह काम करेगा अगर यह इस तथ्य के लिए नहीं था कि मुझे नहीं पता कि वे कितनी बड़ी डेटा सूची आयात करेंगे। मुझे आपके द्वारा पहले भेजे गए लिंक में मेरी समस्या के लिए एक फिक्स मिला है। कोड पोस्ट करेंगे। – Nahbyr

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