2010-10-11 9 views
5

के माध्यम से रेंज क्लास की विफलता का चयन करें यह वह कोड है जिसे मैं वर्तमान में काम कर रहा हूं, और मुझे यह समस्या मिल रही है। मैं एक्सेल में नौसिखिया हूं और मैं यह नहीं समझ सकता कि क्या गलत है।वीबीए

Private Sub cmdRecord_Click() 
Sheets("BxWsn Simulation").Range("Result").Select //This is the line with the problem, as excel told me. 
    Selection.Copy 
    Sheets("Reslt Record").Select 
    Sheets("Reslt Record").Range("A5000").End(xlUp).Offset(1).Select 
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ 
     xlNone, SkipBlanks:=False, Transpose:=False 
    Sheets("CuCon Simulator").Select 
    Application.CutCopyMode = False 
    Range("Improvement").Select 
End Sub 

त्रुटि रेंज वर्ग की पद्धति का चयन करें VBA के माध्यम से विफल रही है, त्रुटि 1004. कोई भी विचार?

धन्यवाद।

संपादित करें:

तो मैं सिर्फ

Sheets("BxWsn Simulation").Select 
Range("Result").Select 

करने के लिए कोड बदल मेरा मानना ​​है कि यह आप इसे सक्रिय बनाने के द्वारा क्या मतलब है? हालांकि मुझे अभी भी ऑब्जेक्ट '_ वर्कशीट' की विधि 'रेंज' मिल रही है, त्रुटि 1004

+0

चुपचाप प्रश्न को संपादित करने के बजाय उत्तर में टिप्पणी छोड़ना बेहतर है; बाद के मामले में, उत्तर के लेखक को आपके अनुवर्ती अनुमोदन पर कोई सूचना नहीं मिलेगी। – GSerg

+0

मैंने अपना जवाब अपडेट कर दिया है। – GSerg

उत्तर

12

मेरा मानना ​​है कि आपके पास the same problem है।
इससे पहले कि आप उस पर एक श्रेणी का चयन कर सकें, शीट सक्रिय होनी चाहिए।

Sheets("BxWsn Simulation").Select 
Sheets("BxWsn Simulation").Range("Result").Select 

या,

With Sheets("BxWsn Simulation") 
    .Select 
    .Range("Result").Select 
End WIth 

जो एक ही है:

इसके अलावा, पत्रक का नाम क्वालीफायर छोड़ नहीं है।

+0

धन्यवाद कि चाल है। – guesthouse123

10

इस विशेष प्रश्न का सही उत्तर "चयन न करें" है। कभी-कभी आपको चुनना या सक्रिय करना होता है, लेकिन 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 का उपयोग करता हूं। यह कोड को और अधिक पोर्टेबल बनाता है और चीजें बदलते समय अप्रत्याशित समस्याओं को रोकता है।

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

+0

+1 यह उत्तर एक को अपमानित किया गया है। –

+0

@ डिक कुस्लेका, बहुत जानकारीपूर्ण, धन्यवाद। – jmaz

1

यह मेरे लिए काम किया।

RowCounter = Sheets(3).UsedRange.Rows.Count + 1 

Sheets(1).Rows(rowNum).EntireRow.Copy 
Sheets(3).Activate 
Sheets(3).Cells(RowCounter, 1).Select 
Sheets(3).Paste 
Sheets(1).Activate 
-1

यह आपको एक आसान गैर जटिल तरीके से कि चारों ओर कैसे प्राप्त है।
sheet(x).range का उपयोग करने के बजाय Activesheet.range("range").select