2012-10-24 17 views
10

मैं एक एकल मैक्रो चलाने की कोशिश कर रहा हूं जो एकाधिक वर्कशीट पर फ़ंक्शन करता है। मान लीजिए कि मैं मैक्रो बटन कार्यपत्रक 4. पर मैं कार्यों मैं चरण दर चरण निष्पादित करना चाहते हैं सूचीबद्ध किया है सौंपा है करते हैं:)एकाधिक वर्कशीट्स में वीबीए मैक्रो

1 कार्यपत्रक 4 में कुछ कोशिकाओं का चयन करें और वर्कशीट में सन्निकट कक्षों में प्रतिलिपि 4.
2) वर्कशीट में कोशिकाओं की रेंज हटाएं 3.
3) वर्कशीट 2 में सेल्स की सीट रेंज, फिर वर्कशीट में कोशिकाओं की इस श्रेणी को पेस्ट करें।
4) एक अलग कार्यपुस्तिका से सेल्स की रेंज लें और वर्कशीट 2 में कॉपी करें। (I जानते हैं कि यह एक पूरी तरह से अलग समस्या है क्योंकि कार्यपुस्तिका स्वचालित रूप से प्रकाशित होती है और मुझे दोनों को जोड़ने का एक तरीका मिलना होगा।)
5) वर्कशीट 4 और वर्कशीट 3 के भीतर स्थित पिवट टेबल अपडेट करें।

मुझे इसके पहले 3 कार्यों में सहायता पसंद आएगी। मैंने नीचे अपना वर्तमान कोड चिपकाया है।

Sub START() 

Dim sh1 As Worksheet 
Dim sh2 As Worksheet 
Dim sh3 As Worksheet 
Dim sh4 As Worksheet 

Set sh1 = ActiveWorkbook.Sheets("Brand") 
Set sh2 = ActiveWorkbook.Sheets("CurrentWeek") 
Set sh3 = ActiveWorkbook.Sheets("PriorWeek") 
Set sh4 = ActiveWorkbook.Sheets("Pivot") 

sh4.Range("B29:B30").Select 
Selection.Copy 

sh4.Range("C29").Select 
ActiveSheet.Paste 

sh3.Range("A4:AC1000").Select 
Selection.Delete 

sh2.Range("A4:AC1000").Select 
Selection.Copy 

sh3.Range("A4").Select 
ActiveSheet.Paste 

End Sub 

यह काम करता है ... लेकिन यह केवल तभी काम करता है जब मैं एक विशिष्ट कार्य करने के लिए सही वर्कशीट में हूं।

+1

'अपरिवर्तनीय चर नामों जैसे' sh1', 'sh2' आदि के बजाय मानते हैं कि उन्हें' shtbrand' 'जैसे कुछ उपयोगी और पारदर्शी क्यों नहीं कहते हैं, shtCurrentWeek' आदि। काम पर एक लड़का यह सटीक वही 'sh1'' sh2' व्यवसाय करता है और जब हम उसका कोड पढ़ने का प्रयास करते हैं तो यह हर किसी को पागल करता है। –

+0

@ जीन-फ्रैंकोइसकोर्बेट हां, यह वास्तव में एक अच्छा विचार है। तर्क यह है कि मैंने पहले ऐसा नहीं किया क्योंकि मेरे व्यवसाय में, कोई भी कोड को कैसे जानता है। यह कार्य जिसे मैं स्वचालित करने की कोशिश कर रहा हूं, लगभग 2-3 वर्षों से मैन्युअल रूप से किया जा चुका है। यह बेतुका है, लेकिन यह एक अच्छा विचार है! धन्यवाद। – kmiao91

उत्तर

12

select, selection और activesheet निकालकर, आप इस शीट स्वतंत्र

Sub START() 

Dim sh1 As Worksheet 
Dim sh2 As Worksheet 
Dim sh3 As Worksheet 
Dim sh4 As Worksheet 

Set sh1 = ActiveWorkbook.Sheets("Brand") 
Set sh2 = ActiveWorkbook.Sheets("CurrentWeek") 
Set sh3 = ActiveWorkbook.Sheets("PriorWeek") 
Set sh4 = ActiveWorkbook.Sheets("Pivot") 

sh4.Range("B29:B30").Copy sh4.Range("C29") 

sh3.Range("A4:AC1000").Delete 

sh2.Range("A4:AC1000").Copy sh3.Range("A4") 

End Sub 
+0

मेरी इच्छा है कि मैं आपको ऊपर उठा सकूं। धन्यवाद। – kmiao91

+0

मुझे विश्वास है कि अब आप कर सकते हैं। – nutsch

5

आप एक महान शुरुआत के लिए बंद हैं। बस थोड़ा और परिशोधन और आप इसे प्राप्त करेंगे।

असल में, इस मामले में कम से कम .Select आपकी श्रेणियां (चादरें, कार्यपुस्तिकाएं, आदि) की आवश्यकता नहीं है। आप सीधे उनके साथ काम कर सकते हैं और Copy का उपयोग कर उस गंतव्य की आपूर्ति कर सकते हैं जहां उनकी प्रतिलिपि बनाई जाएगी। नीचे

कोड देखें:

Sub START() 

Dim sh1 As Worksheet 
Dim sh2 As Worksheet 
Dim sh3 As Worksheet 
Dim sh4 As Worksheet 
Dim wkb As Workbook 

Set wkb = Workbooks("wkbName") '-> best to call workbooks by name, as opposed to "ActiveWorkbook", also best to set it to object 

With wkb '-> now we can work with this object directly and succinctly 

    Set sh1 = .Sheets("Brand") 
    Set sh2 = .Sheets("CurrentWeek") 
    Set sh3 = .Sheets("PriorWeek") 
    Set sh4 = .Sheets("Pivot") 

    sh4.Range("B29:B30").Copy sh4.Range("C29") 

    'sh3.Range("A4:AC1000").Delete -> you don't need this if you are overwritting it 

    sh2.Range("A4:AC1000").Copy sh3.Range("A4") 

End With 

End Sub 
+0

चर को मारना क्यों जरूरी है? – mattboy

+1

@ मैटबॉय -> उन्हें स्मृति से बाहर ले जाने का सबसे अच्छा अभ्यास है। इस छोटे से कोड के लिए, एक बड़ा सौदा नहीं है, लेकिन जब आपकी बड़ी कोड परियोजनाएं होती हैं तो यह मदद कर सकती है। –

+0

जब भी आप सब से बाहर निकलते हैं तो वे मारे जाते हैं, लेकिन स्कॉट ने कहा, जब आपको वास्तव में इसकी आवश्यकता होती है तो यह एक बुरी आदत नहीं है। – nutsch

-2
Sub START() 

Sheet("Pivot").Range("B29:B30").Copy Sheet("Pivot").Range("C29") 
Sheet("CurrentWeek").Range("A4:AC1000").Copy Sheet("PriorWeek").Range("A4") 

End Sub 
+4

-1 अनिवार्य रूप से पहले से स्वीकृत उत्तर का एक टुकड़ा पोस्ट करने में क्या बात है? –

0

शीट ("name1 बनाने के लिए सक्षम हो जाएगा ") .ेंज (" बी 2 9: बी 30 ")। प्रति गंतव्य: = चादरें (" name2 ")। रेंज (" सी 2 9 ")

चादर के नाम नाम 1 और नाम 2

संबंधित मुद्दे