Ingresar nuevo dato en una hoja de excel

Tengo un archivo de excel en el que tengo 2 hojas, una se llama "Lista" y la Otra "Registro".

En "Registro" tengo un espacio en el que pido 2 datos:
Número

Descripción

Además tengo un botón, que al presionarlo, me toma los datos de Número y Descripción y me los pasa a la hoja de "Lista"

Mi problema es que no logro hacer que sea un consecutivo, es decir, en este momento en "Lista" hay 887 datos incluidos, cuando yo ingreso más datos, se van SIEMPRE a la línea 1511 de la hoja "Lista" y no sé porque. Necesito que cuando ingrese datos nuevos se vayan a la línea 888, 889, 890 etc..

1 Respuesta

Respuesta
1

Que pena no dejaste tu macro escrita aquí para ajustarla.

Esta instrucción te busca la primer fila libre de la col A:

Libre= sheets("Lista").Range("A" &  Rows.count).end(xlup).Row+1

Y allí debieras colocar el nuevo registro.

Si con esta instrucción se te va a otra fila es que hay algo en las celdas... Puede ser solo un espacio. Entonces selecciona las filas de de la ultima ocupada hasta el final y suprimí (o borrarlas).

Sdos y no olvides valorar la consulta si el tema queda resuelto. Sino comenta un poco el contenido (formulas, formatos, etc)

Elsa

este es el código que tengo

Sheets("Listas").Select
Rows("1511:1511").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("Registro").Select
Range("B27:B28").Select
Selection.Copy
Sheets("Listas").Select
Range("A1511").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Range("F1516").Select
Sheets("Registro").Select
Range("B27:B28").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("F25").Select

Te traduzco tu código y sola verás el problema:

'se selecciona la hoja Listas
Sheets("Listas").Select
Rows("1511:1511").Select
'se inserta una fila por encima de la 1511
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'se selecciona la hoja Registro
Sheets("Registro").Select 
'se selecciona y copia el rango B27:B28
Range("B27:B28").Select
Selection.Copy
'se pasa a la hoja Listas
Sheets("Listas").Select
'se selecciona la celda A1511 y allí se pega solo valor
Range("A1511").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
'se selecciona la celda F1516 (?????)
Range("F1516").Select
'se vuelve a hoja Registro
Sheets("Registro").Select
'se vuelve a seleccionar el rango B27:B28
Range("B27:B28").Select
'se quita el modo parpadeante del copiado
Application.CutCopyMode = False
'se limpia el rango seleccionado, es decir B27:B28
Selection.ClearContents
'se selecciona la celda F25
Range("F25").Select

Cuando leas los comentarios en el código verás que SIEMPRE se inserta una fila a partir de la 1511.

Debes aclararme si necesitas insertar filas o si se puede ir pegando a continuación de la última, en ese caso te servirá la instrucción que te dejé al inicio.

Lo ideal es que dejes imagen de tu hoja para ver si tenés formatos o porqué hay que insertar filas.

Sdos!

Elsa Gracias.

Mi problema ahora es el siguiente

Te muestro 2 imágenes:

Esta hoja es Registro, en donde ingreso los datos:

Mi intención es que cuando yo toco el botón esos datos pasen a la hoja "listas", sin embargo si te das cuenta, ya en esa hoja hay 884 datos, en donde el nombre va a la columna A, y la descripción a la columna B, entonces la idea es que si yo ingreso uno más me caiga a la fila 885, y así sucesivamente.

Cambié el código, pero lo que hace es que cuando ingreso un dato, efectivamente lo pone en la A885 (eso si, SOLO lo hace si el cursor está en esa celda es decir A885, si yo pongo el cursor en otra celda llámese B888 o cualquier otra entonces cuando presiono el botón me lo guarda ahí, es decir me lo guarda en la B888, ¿hay alguna forma de que se entienda que la siguiente fila disponible es la A885 sin importar donde esté el cursor?)

Además de esto, si por ejemplo ingreso un dato, el siguiente que ingrese me le cae encima al anterior, es decir no se pasa de fila todos los que meta los guarda en la A885 -.-!

Dim Libre As Long
Sheets("Registro").Select
Range("B27:B28").Select
Selection.Copy
Sheets("Listas").Select
Libre = 1 + Sheets("Listas").Range("A" & Rows.Count).End(xlUp).Row
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("Registro").Select
Range("B27:B28").Select
Application.CutCopyMode = False
Selection.ClearContents

Así estaría más correcta la macro, quitando algunas líneas innecesarias:

Dim Libre As Long
'la variable guarda la primer fila libre   'ver*
Libre = 1 + Sheets("Listas").Range("A" & Rows.Count).End(xlUp).Row
'para que no se vea el movimiento de hojas
Application.ScreenUpdating = False
'se ejecuta desde Registro, copiando el rango B27:B28
Sheets("Registro").Select
Range("B27:B28").Copy
'se pega en hoja Listas a partir de la primer fila libre
Sheets("Listas").Select
ActiveSheet.Range("A" & Libre).Select    'ver*
'pega transpuesta
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
'vuelve a hoja registro
Sheets("Registro").Select
'limpia el rango utilizado
Range("B27:B28").ClearContents
'quita el parpadeo del copiado
Application.CutCopyMode = False

* Nota: también es posible indicar directamente la primer fila libre en el pegado sin necesidad de definir la variable 'Libre'

'para que no se vea el movimiento de hojas
Application.ScreenUpdating = False
'se ejecuta desde Registro, copiando el rango B27:B28
Sheets("Registro").Select
Range("B27:B28").Copy
'se pega en hoja Listas a partir de la primer fila libre
Sheets("Listas").Select
ActiveSheet.Range("A" & ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1).Select
'pega transpuesta
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
'vuelve a hoja registro
Sheets("Registro").Select
'limpia el rango utilizado
Range("B27:B28").ClearContents
'quita el parpadeo del copiado
Application.CutCopyMode = False

PD) De la sección Macros de mi sitio podés encontrar más instrucciones para obtener los finales de rangos.

Sdos y no olvides valorar la respuesta.

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas