2014-11-17 3 views
10

आखिरकार, मैं किसी भी कार्यपुस्तिका को रीफ्रेश करने के बाद मैक्रो चलाने के लिए विशेष रूप से ताज़ा करना चाहता हूं, विशेष रूप से एक्सेल में डेटा टैब के नीचे ताज़ा बटन का उपयोग करना। हालांकि, समय के लिए, मैं केवल रीफ्रेश बटन दबाकर आग लगने के लिए पहले रीफ्रेश या आफ्टर रीफ्रेश क्वेरीटेबल ईवेंट प्राप्त करने से संतुष्ट होगा।रीफ्रेश या ताज़ा करने के बाद मैक्रो को कैसे कॉल करें सभी बटन दबाए गए?

'प्रलेखन' माइक्रोसॉफ्ट देव केंद्र वेबसाइट पर की पेशकश की के अलावा, प्रासंगिक पोस्ट मैं इस अनुसंधान की प्रक्रिया के हिस्से के रूप में पढ़ा है में शामिल हैं:

मैं स्पष्ट रूप से कुछ महत्वपूर्ण (और सबसे अधिक संभावना स्पष्ट) याद कर रहा हूं। यहाँ है कि मैं क्या अभी तक है:

के तहत कक्षा मॉड्यूल (qtclass)

Option Explicit 

Private WithEvents qt As Excel.QueryTable 

Private Sub qt_AfterRefresh(ByVal Success As Boolean) 

    MsgBox "qt_AfterRefresh called sucessfully." 
    If Success = True Then 
     Call Module2.SlicePivTbl 
     MsgBox "If called succesfully." 
    End If 

End Sub 

Private Sub qt_BeforeRefresh(Cancel As Boolean) 
    MsgBox "qt_BeforeRefresh called." 
End Sub 

ThisWorkbook मॉड्यूल

Private Sub Workbook_Open() 

    Dim qtevent As qtclass 
    Dim qt As QueryTable 
    Set qt = ThisWorkbook.Worksheets("Data-Fund").ListObjects(1).QueryTable 
    Set qtevent = New qtclass 

End Sub 

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

+2

मैं आमतौर पर एक डमी * पिवोट टेबल * में एक डमी छिपी हुई शीट में स्थापित * पिवोटटेबल अपडेट इवेंट * का उपयोग करता हूं जब एक उपयोगकर्ता * रीफ्रेश ऑल * बटन दबाता है। आपके प्रश्न के लिए, मुझे लगता है कि आप * इस वर्कबुक * (जिसे आप वर्कबुक मॉड्यूल कहते हैं) में 'WithEvents' लाइन डालने से बेहतर है और फिर वहां ईवेंट को आग लगाना। – L42

+0

सुझाव की सराहना करें - वास्तव में इसके बारे में सोचा नहीं था। यह एक कामकाज है और, ईमानदार होने के लिए, मैंने पिवोटटेबल अपडेट ईवेंट के साथ थोड़ा सा झुकाया लेकिन मेरे उपयोग के मामले में इसे समस्याग्रस्त पाया। सलाह के लिये धन्यवाद। – circld

उत्तर

12

आपने वास्तव में कक्षा उदाहरण में क्वेरीटेबल को कनेक्ट नहीं किया है। qtclass

Option Explicit 

Private WithEvents qt As Excel.QueryTable 
Public Property Set HookedTable(q As Excel.QueryTable) 
    Set qt = q 
End Property 

Private Sub qt_AfterRefresh(ByVal Success As Boolean) 

    MsgBox "qt_AfterRefresh called sucessfully." 
    If Success = True Then 
     Call Module2.SlicePivTbl 
     MsgBox "If called succesfully." 
    End If 

End Sub 

Private Sub qt_BeforeRefresh(Cancel As Boolean) 
    MsgBox "qt_BeforeRefresh called." 
End Sub 

न्यू ThisWorkbook कोड संशोधित:

Dim qtevent As qtclass 
Private Sub Workbook_Open() 

    Set qtevent = New qtclass 
    Set qtevent.HookedTable = ThisWorkbook.Worksheets("Data-Fund").ListObjects(1).QueryTable 

End Sub 

ध्यान दें कि यह काफी बारीकी से युग्मित है। यदि आप कक्षा में घटनाओं को उठाना चाहते हैं और अपने qtevent variable WithEvents घोषित करना चाहते हैं तो यह अधिक उपयोग करने योग्य होगा।

+1

आप एक अजीब नायक हैं, धन्यवाद। क्विरीटेबल को कक्षा में जोड़कर और दीम क्विंटेंट को ले जाने के रूप में प्रक्रिया के बाहर qtClass के रूप में महत्वपूर्ण बिट्स मैं गायब था। मैं आपके सुझाव में एक नज़र डालेगा (अब यह आखिरकार काम करता है)। संक्षेप में लेकिन क्रिस्टल स्पष्ट स्पष्टीकरण के लिए बहुत बहुत धन्यवाद। चीयर्स। – circld

+0

हाँ, वाह। यह बिल्कुल जवाब है और फिर भी [so] (http://stackoverflow.com/questions/7040722) [कई] (http://stackoverflow.com/questions/13407514) [उत्तर] (http: // stackoverflow .com/प्रश्न/22083668) [चालू] (http://stackoverflow.com/questions/8925403) [यह] (http://stackoverflow.com/questions/14667035) [साइट] (http://stackoverflow.com/प्रश्न/18136069) जो इस साधारण परिशुद्धता के पास नहीं आते हैं। दो दिन लगने लगे, मुझे यह पता लगाने से पहले, अपना खुद का [डेमो] (https://github.com/mcw0933/StackOverflowQuestion32974553/tree/master) लिखना समाप्त हो गया। अच्छा लगा। – mcw0933

+0

मदद के लिए धन्यवाद - बहुत स्पष्ट स्पष्टीकरण! –

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