fx Macro Recorder & VBA Basics
ENहिन्दी

रिकॉर्ड हुए कोड की सफ़ाई — .Select हटाओ

⏱ 13 min

आप क्या सीखेंगे

  • रिकॉर्डर क्या लिखता है
  • .Select समस्या क्यों है
  • सफ़ाई का नियम

समझिए

1. रिकॉर्डर क्या लिखता है

"A1:E1 को बोल्ड और नीला करो, फिर कॉलम की चौड़ाई सेट करो" रिकॉर्ड करने पर कुछ ऐसा मिलता है:

Sub FormatHeader()
'
' FormatHeader Macro
'
    Range("A1:E1").Select
    Selection.Font.Bold = True
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 12611584
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Selection.Font.Color = RGB(255, 255, 255)
    Columns("A:E").Select
    Selection.ColumnWidth = 15
    Range("A2").Select
End Sub

2. .Select समस्या क्यों है

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

3. सफ़ाई का नियम

जब यह दिखे:

Something.Select
Selection.DoSomething

तो दोनों को जोड़ दें:

Something.DoSomething

4. साफ़ किया हुआ रूप

Sub FormatHeader()
    With Worksheets("Data").Range("A1:E1")
        .Font.Bold = True
        .Font.Color = RGB(255, 255, 255)
        .Interior.Color = RGB(0, 112, 192)
    End With
    Worksheets("Data").Columns("A:E").ColumnWidth = 15
End Sub

नतीजा वही, 16 की जगह 6 लाइनें, और कोई भी शीट खुली हो, यह हमेशा Data शीट पर ही काम करता है।

5. और क्या हटाएँ

रिकॉर्ड हुई लाइन रखें?
.Pattern = xlSolid, .TintAndShade = 0, .PatternColorIndex = xlAutomatic नहीं — डिफ़ॉल्ट वैल्यू हैं
ActiveWindow.ScrollRow = 25 नहीं — रिकॉर्डिंग के दौरान आपने स्क्रॉल किया था
आख़िर में Range("A2").Select नहीं — बस आपने आख़िर में यहाँ क्लिक किया था
Application.CutCopyMode = False हाँ, कॉपी-पेस्ट के बाद (चलती हुई बॉर्डर हटाता है)

6. क्लिपबोर्ड के झंझट बिना कॉपी-पेस्ट

रिकॉर्ड हुआ:

Range("A1:D20").Select
Selection.Copy
Sheets("Report").Select
Range("A1").Select
ActiveSheet.Paste

साफ़:

Worksheets("Data").Range("A1:D20").Copy Destination:=Worksheets("Report").Range("A1")

सिर्फ़ वैल्यू (सबसे तेज़, बिना फ़ॉर्मेट या क्लिपबोर्ड):

Worksheets("Report").Range("A1:D20").Value = Worksheets("Data").Range("A1:D20").Value

7. हमेशा शीट का नाम लिखें

अकेले Range("A1") का मतलब "एक्टिव शीट का A1"। Worksheets("Data").Range("A1") लिखें ताकि मैक्रो हर बार एक ही काम करे। लेसन 4 में शीट को वेरिएबल में रखकर लाइनें छोटी करेंगे।

आम गलतियाँ

.Select हटाना पर Selection वाली लाइनें छोड़ देना (एरर 424 या गलत रेंज)। ActiveCell पर निर्भर कोड (relative रिकॉर्डिंग) को असली रेफ़रेंस से बदले बिना साफ़ करना। CutCopyMode = False हटा देना।

अभ्यास

mediumएक मैक्रो रिकॉर्ड करें जो A1:C10 को एक शीट से दूसरी में कॉपी करे, हेडर बोल्ड करे और कॉलम चौड़ाई सेट करे। फिर ऊपर के नियमों से साफ़ करें और लाइनों की गिनती की तुलना करें। तीसरी शीट से चलाकर साबित करें कि अब यह एक्टिव शीट पर निर्भर नहीं है।
ThisWorkbook.Worksheets("Data").Range("A1:C10").Copy Destination:=ThisWorkbook.Worksheets("Output").Range("A1") से copy करें। Output के With block में .Range("A1:C1").Font.Bold = True और .Columns("A:C").ColumnWidth = 18 रखें। Select/Activate हटाएँ। तीसरी sheet से चलाने पर भी Output समान हो।

प्रश्नोत्तरी

Range("B2").Select + Selection.Value = 5 का साफ़ रूप?
Range("B2").Value = 5
ActiveWindow.ScrollRow हटाना सुरक्षित क्यों है?
यह सिर्फ़ स्क्रॉलिंग रिकॉर्ड करता है
सिर्फ़ वैल्यू कॉपी करने का सबसे तेज़ तरीका?
Dest.Value = Source.Value
रिकॉर्ड हुए कोड की सफ़ाई — .Select हटाओ · हिंदी | ExcelWalaa