समझिए
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 हटा देना।