Macro para copiar datos de un formato de captura a una base de datos dentro del mismo libro

Tengo este código:
Sub Botón2_Haga_clic_en()
Sheets("B"). Range("B65536").End(xlUp).Offset(1, 0) = Sheets("A"). Range("A2")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 1) = Sheets("A"). Range("A3")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 2) = Sheets("A"). Range("E1")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 4) = Sheets("A"). Range("B6")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 5) = Sheets("A"). Range("A6")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 6) = Sheets("A"). Range("A1")
Sheets("B"). Range("B65536").End(xlUp).Offset(1, 0) = Sheets("A"). Range("A2")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 1) = Sheets("A"). Range("A3")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 2) = Sheets("A"). Range("E1")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 4) = Sheets("A"). Range("B7")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 5) = Sheets("A"). Range("A7")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 6) = Sheets("A"). Range("A1")
Sheets("B"). Range("B65536").End(xlUp).Offset(1, 0) = Sheets("A"). Range("A2")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 1) = Sheets("A"). Range("A3")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 2) = Sheets("A"). Range("E1")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 4) = Sheets("A"). Range("B8")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 5) = Sheets("A"). Range("A8")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 6) = Sheets("A"). Range("A1")
Sheets("B"). Range("B65536").End(xlUp).Offset(1, 0) = Sheets("A"). Range("A2")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 1) = Sheets("A"). Range("A3")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 2) = Sheets("A"). Range("E1")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 4) = Sheets("A"). Range("B9")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 5) = Sheets("A"). Range("A9")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 6) = Sheets("A"). Range("A1")
Sheets("B"). Range("B65536").End(xlUp).Offset(1, 0) = Sheets("A"). Range("A2")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 1) = Sheets("A"). Range("A3")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 2) = Sheets("A"). Range("E1")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 4) = Sheets("A"). Range("B10")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 5) = Sheets("A"). Range("A10")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 6) = Sheets("A"). Range("A1")
Sheets("B"). Range("B65536").End(xlUp).Offset(1, 0) = Sheets("A"). Range("A2")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 1) = Sheets("A"). Range("A3")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 2) = Sheets("A"). Range("E1")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 4) = Sheets("A"). Range("B11")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 5) = Sheets("A"). Range("A11")
Sheets("B"). Range("B65536").End(xlUp).Offset(0, 6) = Sheets("A"). Range("A1")

Hasta aqui todo bien, copia los datos del formato de captura y los copia a la hoja seleccionada, mi problema es que copia datos demas, para ello agregue el siguiente codigo, al final de la macro:
Sheets("B").Select
Range("A1").Select
Selection.End(xlDown).Select
Range("F1048576").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
Range(Selection, Selection.End(xlDown)).Select
Rows("17:1048576").Select
Selection.ClearContents
Range("A1").Select
Pero aquí es donde ando atorado, en la linea que marco en negro, ya que no logro ajustarlo a que reconozca el ultimo valor que vaya agregando y me borra los datos que agrego o si pueden sugerirme alguna corrección.

1 Respuesta

Respuesta
1

Tu macro copia datos en 6 filas, a partir de col B (*)

Si te parece que está copiando datos demás quizás debieras revisar las instrucciones de copiado para no repetirlas. Analizar cual es la última fila con datos. Sube una imagen para darme una idea de mejora.

Ahora, manteniendo ese código, si necesitas eliminar filas, debes evaluar cual es la última de alguna col que tenga datos. Veo que bajas por col A pero a la col A no le pasas información, debiera ser B.

Bien, suponiendo que es correcto lo que haces, te paso algunas instrucciones que pueden servirte:

Para reconocer la primer celda vacía de una col (desde arriba hacia abajo (*)

Sheets("B").Select
Range("B1").Select
Selection.End(xlDown).Select
'primer celda vacía en col B
ini = Selection.Row + 1

Si ademas en otra variable guardás la ultima fila que deseas eliminar la sintaxis sería así:

Rows(ini & ":" & fini).Select
Selection. EntireRow. ClearContents

Si en lugar de utilizar Rows, utilizas la de selección que ya tenés, agrega la 2da:

Range(Selection, Selection.End(xlDown)).Select
Selection. EntireRow. ClearContent

Espero que estas instrucciones te sirvan para completar tu macro, sino sube la imagen para revisarlas.

(*) En la sección Macros de mi sitio encontrarás más instrucciones para encontrar rangos.

Sdos

Elsa

Hola Experta, muchas gracias por la pronta respuesta, intente lo que me sugeriste pero creo que no lo hice bien, te anexo imagen de lo que deseo:

Estoy en la hoja A, lo que enmarque en amarillo es lo que la macro copia cuando presiono el boton y lo pega en la hoja B.

Este es el resultado cuando presione el botón y copia los datos a la hoja B, que es la de la segunda imagen, pero como te darás cuenta me da el resultado de arriba, entonces intente que despúes de que pegara los datos, se fuera desde la ultima celda de la columna "F" osea hasta "F1048576" hacia arriba, entonces en la imagen seria hasta "F21", que seleccione todas las filas y borre todo lo que "sobra", pero el valor va ir cambiando según se vaya capturando en la base y es ahi donde ando atorado.

Saludos Cordiales

No hay ninguna razón para que la macro te agregue filas a partir de la 21 ... algo no está bien en tu macro, que como no la dejaste completa no se puede evaluar.

De todos modos, para que puedas salir del paso, para este ejemplo debes evaluar la primer celda vacía en col F y la primera en col B ... ese sería al rango para eliminar.

Estas son las instrucciones:

'primer celda vacía en col F

ini = Range("F" & Rows.Count).End(xlUp).Row + 1

'ultima celda con datos en col B
fini = Range("B" & Rows.Count).End(xlUp).Row

'selecciona ese rango de filas y las borra 
Rows(ini & ":" & fini).Select
Selection.Clear

Nota: Clear borra contenidos y formatos, ClearContens borra solo contenidos.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas