según - ¿Cómo copiar una línea en Excel usando una palabra específica y pegarla en otra hoja de Excel?
formula para jalar informacion de una hoja de excel a otra (3)
He revisado varias publicaciones diferentes y parece que no puedo encontrar el código exacto que estoy buscando. Además, nunca antes había usado VBA, así que estoy tratando de tomar códigos de otras publicaciones y de ingresar mi información para que funcione. Sin suerte todavía. En el trabajo, tenemos un sistema de nómina en Excel . Intento buscar mi nombre "Clarke, Matthew"
y luego copiar esa fila y pegarla en el libro de trabajo que he guardado en mi escritorio "Total hours"
.
Al expandir lo que dice timrau en su comentario, puede usar la función Autofiltro para encontrar la fila con su nombre. (Tenga en cuenta que supongo que tiene abierto el libro de trabajo de origen)
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
Como puede ver, coloque marcadores de posición para la configuración específica de su libro de trabajo.
TRATADO Y PROBADO
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
INSTANTÁNEA
Sé que esto es antiguo, pero para cualquier persona que busque cómo hacerlo, se puede hacer de una manera mucho más directa:
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