खोज…


टिप्पणियों

इस विषय में कोडिंग में अपने अनुभव के माध्यम से एसओ उपयोगकर्ताओं द्वारा खोजी गई उपयोगी टिप्स और ट्रिक्स की एक विस्तृत विविधता शामिल है। ये अक्सर आम कुंठाओं को कम करने के तरीकों के उदाहरण हैं या एक्सेल का अधिक "चतुर" तरीके से उपयोग करने के तरीके।

XlVeryHidden शीट्स का उपयोग करना

एक्सेल में वर्कशीट में Visible प्रॉपर्टी के तीन विकल्प हैं। इन विकल्पों को xlSheetVisibility गणन में स्थिरांक द्वारा दर्शाया जाता है और निम्नानुसार हैं:

  1. xlVisible या xlSheetVisible मान: -1 (नई शीट के लिए डिफ़ॉल्ट)
  2. xlHidden या xlSheetHidden मान: 0
  3. xlVeryHidden xlSheetVeryHidden मान: 2

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

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

किसी वर्कशीट की मैन्युअल रूप से बदलने के लिए। VlSheetVeryHidden के लिए अदृश्य संपत्ति, VBE के गुण विंडो ( F4 ) खोलें, उस वर्कशीट का चयन करें जिसे आप बदलना चाहते हैं और अपना चयन करने के लिए तेरहवीं पंक्ति में ड्रॉप-डाउन का उपयोग करें।

worksheet_properties_window_visible

किसी वर्कशीट की .V property को xlSheetVeryHidden¹ में कोड में बदलने के लिए, इसी तरह से .Virect प्रॉपर्टी को एक्सेस करें और एक नया मान असाइन करें।

with Sheet3
    .Visible = xlSheetVeryHidden
end with

S दोनों xlVeryHidden और xlSheetVeryHidden ने 2 का संख्यात्मक मान लौटाया (वे परस्पर विनिमय योग्य हैं)।

वर्कशीट .Name, .Index या orCodeName

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

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

worksheet_tab_queue

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

'reference worksheet by .Name
with worksheets("Monday")
    'operation code here; for example:
    .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp)) = 1
end with

'reference worksheet by ordinal .Index
with worksheets(1)
    'operation code here; for example:
    .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp)) = 1
end with

मूल आदेश और मूल कार्यपत्रक नाम दोनों में समझौता किया गया है। हालाँकि, यदि आपने वर्कशीट की .CodeName संपत्ति का उपयोग किया है, तो आपकी उप प्रक्रिया अभी भी चालू होगी

with Sheet1
    'operation code here; for example:
    .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp)) = 1
end with

निम्न छवि VBA प्रोजेक्ट विंडो ([Ctrl] + R) को दिखाती है जो कि वर्कशीट को .CodeName और उसके बाद .Name (कोष्ठक में) सूचीबद्ध करती है। उनके द्वारा दिखाए जाने वाले क्रम में परिवर्तन नहीं होता है; ordinal .Index को उस क्रम से लिया जाता है, जिसे वे वर्कशीट विंडो में नाम टैब कतार में प्रदर्शित करते हैं।

worksheet_project_window

हालांकि एक .CodeName का नाम बदलना असामान्य है, लेकिन यह असंभव नहीं है। बस VBE के गुण विंडो ([F4]) खोलें।

worksheet_properties_window

वर्कशीट .CodeName पहली पंक्ति में है। वर्कशीट की .Name दसवीं में है। दोनों ही संपादन योग्य हैं।

डायनामिक के साथ स्ट्रिंग्स का उपयोग डायनेमिक एरर्स के स्थान पर करें

VBA में डायनामिक एरे का उपयोग करना बहुत बड़े डेटा सेटों पर काफी क्लूनी और समय गहन हो सकता है। जब डायनेमिक ऐरे (स्ट्रिंग्स, नंबर, बुलियन आदि) में सरल डेटा प्रकारों को संग्रहीत करते हैं, तो कोई कुछ चतुर स्ट्रिंग प्रक्रियाओं के साथ Split() फ़ंक्शन का उपयोग करके VBA में डायनेमिक सरणियों के लिए आवश्यक ReDim Preserve बयानों से बच सकता है। उदाहरण के लिए, हम एक लूप को देखेंगे जो कुछ स्थितियों के आधार पर रेंज से स्ट्रिंग तक मानों की एक श्रृंखला जोड़ता है, फिर एक लिस्टबॉक्स के मान को पॉप्युलेट करने के लिए उस स्ट्रिंग का उपयोग करता है।

Private Sub UserForm_Initialize()

Dim Count As Long, DataString As String, Delimiter As String

For Count = 1 To ActiveSheet.UsedRows.Count
    If ActiveSheet.Range("A" & Count).Value <> "Your Condition" Then
        RowString = RowString & Delimiter & ActiveSheet.Range("A" & Count).Value
        Delimiter = "><" 'By setting the delimiter here in the loop, you prevent an extra occurance of the delimiter within the string
    End If
Next Count

ListBox1.List = Split(DataString, Delimiter)

End Sub

Delimiter स्ट्रिंग को ही किसी भी मूल्य पर सेट किया जा सकता है, लेकिन मूल्य का चयन करना समझदारी है जो स्वाभाविक रूप से सेट के भीतर नहीं होगा। उदाहरण के लिए, आप तारीखों के एक कॉलम को संसाधित कर रहे थे। उस मामले में, का उपयोग कर . , - , या / रूप में, सीमांकक के रूप में नासमझी होगी, क्योंकि इनमें से किसी भी एक का उपयोग करने के लिए तिथियों को स्वरूपित किया जा सकता है, जिससे आप अनुमान से अधिक डेटा अंक उत्पन्न कर सकते हैं।

नोट: इस विधि का उपयोग करने की सीमाएँ हैं (अर्थात् स्ट्रिंग्स की अधिकतम लंबाई), इसलिए इसका उपयोग बहुत बड़े डेटासेट के मामलों में सावधानी के साथ किया जाना चाहिए। यह VBA में गतिशील सरणियों को बनाने के लिए सबसे तेज़ या सबसे प्रभावी तरीका नहीं है, लेकिन यह एक व्यवहार्य विकल्प है।

एक्सेल आकार के लिए डबल क्लिक करें घटना

डिफ़ॉल्ट रूप से, एक्सेल में आकृतियों के पास एकल बनाम दोहरे क्लिक को संभालने का एक विशिष्ट तरीका नहीं है, जिसमें केवल "ओनएक्शन" संपत्ति होती है, जिससे आपको क्लिकों को संभालने की अनुमति मिलती है। हालाँकि, ऐसे उदाहरण भी हो सकते हैं, जहाँ आपके कोड को आपको एक डबल क्लिक पर अलग तरह से (या विशेष रूप से) कार्य करने की आवश्यकता होती है। निम्नलिखित सबरूटीन को आपके VBA प्रोजेक्ट में जोड़ा जा सकता है और, जब आपके आकार के लिए OnAction दिनचर्या के रूप में सेट किया जाता है, तो आप डबल क्लिक पर कार्य कर सकते हैं।

Public Const DOUBLECLICK_WAIT as Double = 0.25 'Modify to adjust click delay
Public LastClickObj As String, LastClickTime As Date

Sub ShapeDoubleClick()
    
    If LastClickObj = "" Then
        LastClickObj = Application.Caller
        LastClickTime = CDbl(Timer)
    Else
        If CDbl(Timer) - LastClickTime > DOUBLECLICK_WAIT Then
            LastClickObj = Application.Caller
            LastClickTime = CDbl(Timer)
        Else
            If LastClickObj = Application.Caller Then
                'Your desired Double Click code here
                LastClickObj = ""
            Else
                LastClickObj = Application.Caller
                LastClickTime = CDbl(Timer)
            End If
        End If
    End If
    
End Sub

यह नियमित रूप से आकार को पहले क्लिक को कार्यात्मक रूप से अनदेखा करने का कारण होगा, केवल निर्दिष्ट समय अवधि के भीतर दूसरे क्लिक पर अपना वांछित कोड चला रहा है।

ओपन फाइल डायलॉग - मल्टीपल फाइल्स

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

Option Explicit

Sub OpenMultipleFiles()
    Dim fd As FileDialog
    Dim fileChosen As Integer
    Dim i As Integer
    Dim basename As String
    Dim fso As Variant
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    basename = fso.getBaseName(ActiveWorkbook.Name)
    fd.InitialFileName = ActiveWorkbook.Path ' Set Default Location to the Active Workbook Path
    fd.InitialView = msoFileDialogViewList
    fd.AllowMultiSelect = True
    
    fileChosen = fd.Show
    If fileChosen = -1 Then
        'open each of the files chosen
        For i = 1 To fd.SelectedItems.Count
            Debug.Print (fd.SelectedItems(i))
            Dim fileName As String
            ' do something with the files.
            fileName = fso.getFileName(fd.SelectedItems(i))
            Debug.Print (fileName)
        Next i
    End If

End Sub


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow