2012-07-24 8 views
11

मैंने अलग-अलग पदों का एक समूह चेक किया है और मुझे लगता है कि सटीक कोड नहीं मिल रहा है। इसके अलावा मैंने कभी भी वीबीए का उपयोग नहीं किया है, इसलिए मैं अन्य पदों से कोड लेने की कोशिश कर रहा हूं और इसके लिए अपनी जानकारी को इनपुट करने के लिए इनपुट कर रहा हूं। अभी तक कोई भाग्य नहीं है। काम पर हमारे पास एक्सेल में पेरोल सिस्टम है। मैं अपना नाम "Clarke, Matthew" खोजने की कोशिश कर रहा हूं और फिर उस पंक्ति की प्रतिलिपि बनाएँ और इसे अपने डेस्कटॉप "Total hours" पर सहेजी गई कार्यपुस्तिका में पेस्ट करें।एक विशिष्ट शब्द का उपयोग करके एक्सेल में एक पंक्ति की प्रतिलिपि बनाने और किसी अन्य एक्सेल शीट पर चिपकाने के लिए कैसे?

+3

यदि आप एक ही कॉलम पर कीवर्ड खोज रहे हैं (उदाहरण के लिए, सभी "क्लार्क, मैथ्यू'" कॉलम ए पर हैं), तो Excel की फ़िल्टर सुविधा को काम करना चाहिए। – timrau

+2

शायद आपको जो मिला है उसे पोस्ट करना हमें मदद शुरू करने के लिए एक बेहतर जगह देगा। आप 'VLOOKUP' फ़ंक्शन में भी देख सकते हैं। –

+0

यह देखें http://stackoverflow.com/questions/10319096/error-when-i-use-specialcells-of-autofilter-to-get-visible-cells-in-vba/10319230#10319230 अपनी आवश्यकताओं के अनुरूप इसे संशोधित करें :) –

उत्तर

2

अपनी टिप्पणी में टाइमरू ने जो कहा, उस पर विस्तार करते हुए, आप ऑटोफिल्टर फ़ंक्शन का उपयोग अपने नाम के साथ पंक्ति को खोजने के लिए कर सकते हैं। आप मैं अपनी कार्यपुस्तिका के विशिष्ट सेटअप के लिए में प्लेसहोल्डर डाल देख सकते हैं (ध्यान दें कि मैं तुम्हें स्रोत कार्यपुस्तिका खुला है संभालने हूँ)

Dim curBook As Workbook 
Dim targetBook As Workbook 
Dim curSheet As Worksheet 
Dim targetSheet As Worksheet 
Dim lastRow As Integer 

Set curBook = ActiveWorkbook 
Set curSheet = curBook.Worksheets("yourSheetName") 

'change the Field number to the correct column 
curSheet.Cells.AutoFilter Field:=1, Criteria1:="Clarke, Matthew" 

'The Offset is to remove the header row from the copy 
curSheet.AutoFilter.Range.Offset(1).Copy 
curSheet.ShowAllData 

Set targetBook = Application.Workbooks.Open "PathTo Total Hours" 
Set targetSheet = targetBook.WorkSheet("DestinationSheet") 

lastRow = Cells.Find(What:="*", After:=Range("A1"), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row 

targetSheet.Cells(lastRow + 1, 1).PasteSpecial 

targetBook.Save 
targetBook.Close 

+0

'ActiveSheet.AutoFilter.Range.Offset (1)। कॉपी' यह करने का यह एक गलत तरीका है :) कृपया टिप्पणी में पोस्ट किए गए दो लिंक देखें। –

+0

@ सिद्धार्थ मैंने पाया है कि 'ऑटोफिल्टर.रेंज' ठीक काम करता है। 'स्पेशल कैल्स (xlCellTypeVisible)' भी काम करना चाहिए, लेकिन मुझे इसके साथ समस्याएं भी रिक्त कक्ष लौट रही हैं। –

18

कोशिश की और परीक्षण

Sub Sample() 
    Dim wb1 As Workbook, wb2 As Workbook 
    Dim ws1 As Worksheet, ws2 As Worksheet 
    Dim copyFrom As Range 
    Dim lRow As Long '<~~ Not Integer. Might give you error in higher versions of excel 
    Dim strSearch As String 

    Set wb1 = ThisWorkbook 
    Set ws1 = wb1.Worksheets("yourSheetName") 

    strSearch = "Clarke, Matthew" 

    With ws1 

     '~~> Remove any filters 
     .AutoFilterMode = False 

     '~~> I am assuming that the names are in Col A 
     '~~> if not then change A below to whatever column letter 
     lRow = .Range("A" & .Rows.Count).End(xlUp).Row 

     With .Range("A1:A" & lRow) 
      .AutoFilter Field:=1, Criteria1:="=*" & strSearch & "*" 
      Set copyFrom = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow 
     End With 

     '~~> Remove any filters 
     .AutoFilterMode = False 
    End With 

    '~~> Destination File 
    Set wb2 = Application.Workbooks.Open("C:\Sample.xlsx") 
    Set ws2 = wb2.Worksheets("Sheet1") 

    With ws2 
     If Application.WorksheetFunction.CountA(.Cells) <> 0 Then 
      lRow = .Cells.Find(What:="*", _ 
          After:=.Range("A1"), _ 
          Lookat:=xlPart, _ 
          LookIn:=xlFormulas, _ 
          SearchOrder:=xlByRows, _ 
          SearchDirection:=xlPrevious, _ 
          MatchCase:=False).Row 
     Else 
      lRow = 1 
     End If 

     copyFrom.Copy .Rows(lRow) 
    End With 

    wb2.Save 
    wb2.Close 
End Sub 

स्नैपशॉट

enter image description here

+0

+1 यहां बहुत सारे एज केस हैं, मैं सभी फीड बैक के लिए –

+0

TY में नहीं गया था। मैं उस दूसरे मैक्रो का उपयोग करने की कोशिश कर रहा हूं लेकिन अब इस लाइन पर एक त्रुटि संदेश प्राप्त कर रहा हूं .ऑटोफिल्टर फ़ील्ड: = 1, मानदंड 1: = "= *" और स्ट्रशर्च और "*" .... मुझे बताता है 'रन टाइम त्रुटि 1004: श्रेणी की ऑटोफिल्टर विधि विफल '। कोई सुझाव? – user1548751

+0

आपने यहां क्या सेट किया है? 'रेंज (" ए 1: ए "और एलआरओ) ' के साथ? –

1

मैं जानता हूँ कि यह पुराना है, लेकिन किसी और को ऐसा करने के तरीके के लिए खोज के लिए, यह किया जा सकता है एक और अधिक प्रत्यक्ष फैशन:

Public Sub ExportRow() 
    Dim v 
    Const KEY = "Clarke, Matthew" 
    Const WS = "Sheet1" 
    Const OUTPUT = "c:\totalhours.xlsx" 
    Const OUTPUT_WS = "Sheet1" 

    v = ThisWorkbook.Sheets(WS).Evaluate("index(a:xfd,match(""" & KEY & """,a:a,),)") 
    With Workbooks.Open(OUTPUT).Sheets(OUTPUT_WS) 
     .[1:1].Offset(.[counta(a:a)]) = v 
     .Parent.Save: .Parent.Close 
    End With 
End Sub 
संबंधित मुद्दे