इस विशेष प्रश्न का सही उत्तर "चयन न करें" है। कभी-कभी आपको चुनना या सक्रिय करना होता है, लेकिन 99% बार आप नहीं करते हैं। यदि आपका कोड
Select something
Do something to the selection
Select something else
Do something to the selection
आपको शायद प्रतिबिंबित करने और चयन करने पर विचार करने की आवश्यकता नहीं है।
त्रुटि, ऑब्जेक्ट '_Worksheet' की विधि 'रेंज' विफल हुई, त्रुटि 1004, जो आपको मिल रही है क्योंकि उस पर बटन के साथ शीट में "परिणाम" नामक श्रेणी नहीं है। अधिकांश (शायद सभी) गुण जो किसी ऑब्जेक्ट को वापस करते हैं, उनमें एक डिफ़ॉल्ट अभिभावक वस्तु होती है। इस मामले में, आप एक रेंज ऑब्जेक्ट को वापस करने के लिए रेंज प्रॉपर्टी का उपयोग कर रहे हैं। चूंकि आप श्रेणी संपत्ति को अर्हता प्राप्त नहीं करते हैं, इसलिए Excel डिफ़ॉल्ट का उपयोग करता है।
डिफ़ॉल्ट अभिभावक वस्तु परिस्थितियों के आधार पर भिन्न हो सकती है। यदि आपका कोड मानक मॉड्यूल में था, तो ActiveSheet डिफ़ॉल्ट अभिभावक होगा और Excel ActiveSheet को हल करने का प्रयास करेगा। श्रेणी ("परिणाम")। आपका कोड शीट के क्लास मॉड्यूल (उस पर बटन वाला शीट) में है। जब अयोग्य संदर्भ का उपयोग किया जाता है, तो डिफ़ॉल्ट अभिभावक वह शीट होता है जो उस मॉड्यूल से जुड़ा होता है। इस मामले में वे वही हैं क्योंकि शीट को बटन पर क्लिक करने के लिए सक्रिय होना चाहिए, लेकिन यह हमेशा मामला नहीं है।
जब एक्सेल त्रुटि देता है जिसमें '_Object' (आपका कहा गया '_Worksheet') जैसे टेक्स्ट शामिल है, तो यह हमेशा डिफ़ॉल्ट मूल ऑब्जेक्ट का जिक्र करता है - अंडरस्कोर इसे दूर देता है। आम तौर पर इसे ठीक करने का तरीका माता-पिता के बारे में स्पष्ट होने के संदर्भ में योग्यता प्राप्त करना है। लेकिन जब आपको आवश्यकता नहीं है तो चयन और सक्रिय करने के मामले में, कोड को दोबारा सुधारना बेहतर होता है।
यहाँ एक तरह से किसी भी चयन या सक्रिय किए बिना अपने कोड लिखने के लिए है।
Private Sub cmdRecord_Click()
Dim shSource As Worksheet
Dim shDest As Worksheet
Dim rNext As Range
'Me refers to the sheet whose class module you're in
'Me.Parent refers to the workbook
Set shSource = Me.Parent.Worksheets("BxWsn Simulation")
Set shDest = Me.Parent.Worksheets("Reslt Record")
Set rNext = shDest.Cells(shDest.Rows.Count, 1).End(xlUp).Offset(1, 0)
shSource.Range("Result").Copy
rNext.PasteSpecial xlPasteFormulasAndNumberFormats
Application.CutCopyMode = False
End Sub
जब मैं एक वर्ग मॉड्यूल में हूँ, चादर की क्लास मॉड्यूल है कि आप में काम कर रहे हैं की तरह, मैं हमेशा उस वर्ग के संदर्भ में काम करने के लिए प्रयास करें। तो मैं ActiveWorkbook के बजाय Me.Parent का उपयोग करता हूं। यह कोड को और अधिक पोर्टेबल बनाता है और चीजें बदलते समय अप्रत्याशित समस्याओं को रोकता है।
मुझे यकीन है कि अब आपके पास मिलीसेकंड में कोड चलाया गया है, इसलिए आपको परवाह नहीं है, लेकिन चयन से परहेज करना निश्चित रूप से आपके कोड को तेज करेगा और आपको स्क्रीन अपडेटिंग सेट करने की आवश्यकता नहीं है। यह महत्वपूर्ण हो सकता है क्योंकि आपका कोड बढ़ता है या एक अलग स्थिति में।
चुपचाप प्रश्न को संपादित करने के बजाय उत्तर में टिप्पणी छोड़ना बेहतर है; बाद के मामले में, उत्तर के लेखक को आपके अनुवर्ती अनुमोदन पर कोई सूचना नहीं मिलेगी। – GSerg
मैंने अपना जवाब अपडेट कर दिया है। – GSerg