valores una pegar pasar para otro otra macro libro hoja filtrar especificas datos copiar condicion con celdas buscar excel vba vb6

excel - una - macro para filtrar datos y pegar valores en otra hoja



Macro de Excel para copiar y pegar datos de una hoja de cálculo a otra hoja de cálculo (2)

Lo primero es lo primero:

  • Deja de usar. Selecciona y .Activate cuando no sean necesarios, son los métodos del diablo. Trate directamente con los objetos de rango / hoja de trabajo.
  • Cambie los contadores de fila de Intergers a longs por si acaso.
  • Declarar explícitamente en qué hoja de trabajo está trabajando puede salvarse de extraños errores / errores. Si no te gusta la escritura, utiliza un objeto de hoja de cálculo.
  • Su manejador de errores siempre debe generar err.Number y err.Description. Si lo hubiera hecho desde el principio, probablemente no habría tenido que publicar esta pregunta.
  • Range.Copy tiene un argumento de destino. Úselo en lugar de Range.Paste para ahorrar algunos dolores de cabeza potenciales.

Aquí hay un código simplificado, mira si funciona:

Sub SearchForString() Dim LSearchRow As Long Dim LCopyToRow As Long Dim wksInput As Worksheet Dim wksOutput As Worksheet On Error GoTo Err_Execute ''Create a new sheet output to and store a reference to it ''in the wksOutput variable Set wksOutput = Worksheets.Add(AFter:=Worksheets(Worksheets.Count)) wksOutput.Name = "MySheet" ''The wksInput variable will hold a reference to the worksheet ''that needs to be searched Set wksInput = ThisWorkbook.Worksheets("Sheet2") ''Start copying data to row 2 in Sheet2 (row counter variable) LCopyToRow = 2 ''Loop through all the rows that contain data in the worksheet ''Start search in row 4 For LSearchRow = 4 To wksInput.UsedRange.Rows.Count ''If value in column E = "Mail Box", copy entire row to wksOutput If wksInput.Cells(LSearchRow, 5) = "Mail Box" Then ''One line copy/paste wksInput.Rows(LSearchRow).Copy wksOutput.Cells(LCopyToRow, 1) ''Increment the output row LCopyToRow = LCopyToRow + 1 End If Next LSearchRow With wksInput .Activate .Range("A3").Select End With MsgBox "All matching data has been copied." Exit Sub Err_Execute: MsgBox "An error occurred. Number: " & Err.Number & " Description: " & Err.Description End Sub

Intento buscar un valor en una columna y copiar la fila de Sheet1 y crear una nueva hoja como MySheet y pegar esa fila en particular. Pero obtengo un error de tiempo de ejecución al pegar datos en MySheet. Cualquier sugerencia, por favor.

Entrada de datos Estoy intentando:

ID nombre precio unidades desc

1 ikura 10 4 buzón

2 prueba 11 14 xxxx

3 prueba 11 14 aaaa

4 prueba 11 14 buzón

Sub SearchForString() Dim LSearchRow As Integer Dim LCopyToRow As Integer On Error GoTo Err_Execute ''Start search in row 4 LSearchRow = 4 ''Start copying data to row 2 in Sheet2 (row counter variable) LCopyToRow = 2 Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = "MySheet" While Len(Range("A" & CStr(LSearchRow)).Value) > 0 ''If value in column E = "Mail Box", copy entire row to Sheet2 If Range("E" & CStr(LSearchRow)).Value = "Mail Box" Then ''Select row in Sheet1 to copy Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select Selection.Copy ''Paste row into Sheet2 in next row Sheets("MySheet").Select Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select ActiveSheet.Paste ''Move counter to next row LCopyToRow = LCopyToRow + 1 ''Go back to Sheet1 to continue searching Sheets("Sheet1").Select End If LSearchRow = LSearchRow + 1 Wend ''Position on cell A3 Application.CutCopyMode = False Range("A3").Select MsgBox "All matching data has been copied." Exit Sub Err_Execute: MsgBox "An error occurred." End Sub

Saludos,

Raju


Prueba esta versión simplificada:

Sub CopyData() ''// Turn off screen updating for cosmetics Application.ScreenUpdating = False Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "MySheet" ''// Change this to your sheet you are copying from With Sheet1 ''// Filter all rows with Mail Box .Range("E:E").AutoFilter Field:=1, Criteria1:="Mail Box", Operator:=xlAnd ''// Copy all rows except header .UsedRange.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Copy Worksheets("MySheet").Cells(2, 1) ''// Remove the autofilter If .AutoFilterMode Then .AutoFilterMode = False End With Application.ScreenUpdating = True MsgBox "All matching data has been copied." End Sub