Access
 sql >> डेटाबेस >  >> RDS >> Access

VBA कीमिया:तरीकों को गुणों में बदलना

एक्सेल में कोड निष्पादन को गति देने के सर्वोत्तम तरीकों में से एक है एप्लिकेशन.स्क्रीनअपडेटिंग का उपयोग करके स्क्रीन अपडेट करना बंद करना। संपत्ति। आप एक्सेस में Application.Echo . का उपयोग करके वही काम कर सकते हैं विधि।

ध्यान दें कि मैंने एक्सेल संस्करण को संपत्ति . के रूप में संदर्भित किया है और एक्सेस संस्करण विधि . के रूप में . इसका मतलब है कि हम एक्सेल में स्क्रीन पेंटिंग की स्थिति की जांच कर सकते हैं, लेकिन हम एक्सेस में ऐसा नहीं कर सकते। यह एक महत्वपूर्ण अंतर साबित होता है।

मेरी कोड लाइब्रेरी में मेरे कई कार्य हैं जो अस्थायी रूप से स्क्रीन पेंटिंग को बंद कर देते हैं। तकनीक का उपयोग आम तौर पर एक्सेल में दिखाई देने वाले प्रदर्शन को बढ़ावा देने के लिए नहीं किया जाता है। इसके बजाय, यह "फ़ॉर्म फ्लैशिंग" के प्रकार को रोककर इंटरफ़ेस में सुधार करता है, जो तब होता है जब हम अपने प्रपत्रों की उपस्थिति में तेजी से बदलाव करते हैं।

एक साधारण उपयोग का मामला

मेरे पास एक क्लास मॉड्यूल है जो फॉर्म का आकार बदलने पर व्यक्तिगत रूप से आकार बदलने के लिए उन्नत सुविधाएं प्रदान करता है। जब मैं पहली बार इस मॉड्यूल को विकसित कर रहा था, तो दृश्य प्रभाव बहुत परेशान करने वाला था। जब भी प्रपत्र का आकार बदला जाता था, प्रत्येक व्यक्तिगत नियंत्रण स्क्रीन पर एक बार में एक आकार बदलता था।

Public Sub weForm_Resize()
   '... loop through and resize controls based on their Tag property...
End Sub

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

Public Sub weForm_Resize()
    Application.Echo False
    
    '... loop through and resize controls based on their Tag property...
    
    Application.Echo True
End Sub

इससे उपयोगकर्ता अनुभव में काफी सुधार हुआ। मैंने अपने सभी कोड में इस तकनीक का उपयोग करना शुरू कर दिया था जो यूजर इंटरफेस को संशोधित कर रहा था। और वह तब हुआ जब मुझे समस्याओं का सामना करना पड़ा।

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

स्क्रीन पेंटिंग की स्थिति को संरक्षित करना

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

Sub ComplexExcelProcess()
    Dim SavePaintStatus As Boolean
    SavePaintStatus = Application.ScreenUpdating
    
    '...run some complex calculations...
    
    Application.ScreenUpdating = SavePaintStatus
End Sub

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

मैंने समस्या को कैसे संभाला? मैंने एक क्लास मॉड्यूल बनाया और Application.Echo . को लपेटा एक वर्ग संपत्ति के अंदर विधि। मैंने कार्यक्रम की स्थिति के इस टुकड़े को बनाए रखने के लिए सिंगलटन पैटर्न (उस समय यह महसूस किए बिना) का उपयोग किया। मैंने इस वर्ग का नाम clsApp . रखा है और नया . के साथ घोषित वर्ग का एकल सार्वजनिक उदाहरण बनाया कीवर्ड ताकि यह हमेशा उपलब्ध रहे।

नमूना कोड

यहां मेरे clsApp . का एक अंश दिया गया है कक्षा:

'--== clsApp class module ==--
Option Explicit
Option Compare Database

Private m_bEcho As Boolean

Private Sub Class_Initialize()
    Application.Echo True
    m_bEcho = True
End Sub

Public Property Get Echo() As Boolean
    Echo = m_bEcho
End Property

Public Property Let Echo(ByVal bEcho As Boolean)
    Application.Echo bEcho
    m_bEcho = bEcho
End Property

एक अलग मानक मॉड्यूल में, मैंने इस तरह कक्षा का एक सार्वजनिक उदाहरण घोषित किया:

Public App As New clsApp

अब मेरे पास अपने एप्लिकेशन की स्क्रीन पेंटिंग की स्थिति की जांच करने का एक तरीका था। केवल आवश्यकता यह थी कि मैं कभी भी Application.Echo . का उपयोग नहीं करूंगा सीधे मेरे किसी भी कोड में। मैं हमेशा App.Echo . का उपयोग करता हूं अब स्क्रीन पेंटिंग फ्लैग सेट करने के लिए।

नमूना उपयोग

इसने मुझे अपना आकार बदलने वाला कोड इसमें बदलने की अनुमति दी, जो पहले से मेरे एक्सेल उदाहरण की तरह दिखता है:

Public Sub weForm_Resize()
    Dim SaveEcho As Boolean
    SaveEcho = App.Echo       'Save the current screen painting state
    App.Echo = False
    
    '... loop through and resize controls based on their Tag property...
    
    App.Echo = SaveEcho       'Restore the screen painting state
End Sub

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. प्राथमिक कुंजी क्यों महत्वपूर्ण हैं और किसी एक को कैसे चुनें

  2. अच्छे डेटाबेस डिजाइन का महत्व (और इसे प्राप्त करने के लिए 7 कदम)

  3. इग्निशन को माइक्रोसॉफ्ट एक्सेस से कनेक्ट करना

  4. बैकएंड डेटाबेस को एक नए स्थान पर ले जाने के बाद एक्सेस 2016 में लिंक्ड टेबल्स को कैसे अपडेट करें

  5. अपने ग्राहकों से संवेदनशील जानकारी को सुरक्षित रखने के 4 तरीके