Esta macro nos facilita el ingreso de datos hacia el Excel de una forma práctica y sencilla, como llevar datos a excel desde un formulario.
Primero creamos un formulario como se muestra a
continuación.
A los cuadros de texto les ponemos los siguientes nombres
(Name) en sus respectivas propiedades.
(Name)=TXTCODIGO
(Name)=TXTDESCRIPCION
(Name)=TXTSOTCK
(Name)=TXTPRECIO
Lo mismo para los botones cambiamos la propiedad (Name).
(Name)=CMDGRABAR
(Name)=CMDSALIR
El nombre del formulario también es muy importante.
(Name)=frminicio
No se olviden que desde la propiedad caption podemos poner el
nombre que se va a mostrar al usuario en dicho elemento.
¡Listo!, una vez hecho eso le damos doble clic al botón GRABAR para ir a visual basic y
comenzar la programación de dicho botón, que es la siguiente.
Private Sub CMDGRABAR_Click()
Sheets("ARTICULOS").Select
NR =
Application.WorksheetFunction.CountA(Range("A:A"))
If TXTCODIGO = "" Then
MsgBox
"INGRESE CODIGO"
TXTCODIGO.SetFocus
Exit Sub
End If
If TXTDESCRIPCION = "" Then
MsgBox
"INGRESE DESCRIPCION"
TXTDESCRIPCION.SetFocus
Exit Sub
End If
If TXTSTOCK = "" Then
MsgBox
"INGRESE STOCK"
TXTSTOCK.SetFocus
Exit Sub
Else
If Not
(IsNumeric(TXTSTOCK)) Then
MsgBox "EL
STOCK DEBE SER NUMEROS"
TXTSTOCK =
""
TXTSTOCK.SetFocus
Exit Sub
End If
End If
If TXTPRECIO = "" Then
MsgBox
"INGRESE PRECIO"
TXTPRECIO.SetFocus
Exit Sub
Else
If Not
(IsNumeric(TXTPRECIO)) Then
MsgBox "EL
PRECIO DEBE SER NUMEROS"
TXTPRECIO =
""
TXTPRECIO.SetFocus
Exit Sub
End If
End If
Cells(NR + 1, 1) = TXTCODIGO
Cells(NR + 1, 2) = TXTDESCRIPCION
Cells(NR + 1, 3) = Val(TXTSTOCK)
Cells(NR + 1, 4) = Val(TXTPRECIO)
TXTCODIGO = ""
TXTDESCRIPCION = ""
TXTSTOCK = ""
TXTPRECIO = ""
TXTCODIGO.SetFocus
End Sub
Ahora vamos al Excel y desde la ficha programador vamos a
insertar un botón de comando, también añadimos texto como se muestra en la
siguiente imagen.
El nombre de la hoja le ponemos ARTÍCULOS, como se muestra en la imagen.
Ahora damos doble clic a nuestro botón para ir a visual
basic donde aremos lo siguiente.
Su código es el siguiente:
Private Sub CMDINICIO_Click()
frminicio.Show
End Sub
Del código tenemos lo siguiente:
NR =
Application.WorksheetFunction.CountA(Range("A:A")), con este
código lo que hacemos es decirle al visual basic que llame una función del
excel que en este caso es la función contara,
esta función cuenta los datos ingresados en la columna (A:A),siempre que llamemos
a una función de Excel debemos colocarla en inglés.
TXTCODIGO.SetFocus,
lo que hace este código es llevar el cursor de escritura a dicho cuadro de
texto, If TXTCODIGO = "" Then,
con este código le decimos si el cuadro de texto está vacío entonces, si se
cumple la condición nos mandara un error, de lo contrario el programa
continuara a la siguiente condición, nos obliga a escribir un dato en el cuadro
de texto, también tenemos lo siguiente, If
Not (IsNumeric(TXTPRECIO)) Then, con este código condicionamos a solo
ingresar datos numéricos, de lo contrario mandara error, Cells(NR + 1, 1) = TXTCODIGO, con este código identificamos la
celda donde se ubicara la información escrita en los cuadros de texto
correspondientes.
frminicio.Show,
abre el formulario para poder ingresar los datos.
Esto mismo exactamente pero necesito que los datos capturados se inserten en una hoja diferente a la hoja donde se llama la UserForm
ResponderEliminarcambia esto
EliminarSheets("ARTICULOS").Select
en lugar de ARTICULOS puedes escoger la hoja que tu desees, hoja2, hoja3 o le pones el nombre que tu desees
cambia esto
ResponderEliminarSheets("ARTICULOS").Select
en lugar de ARTICULOS puedes escoger la hoja que tu desees, hoja2, hoja3 o le pones el nombre que tu desees
Hola Amigo buenas tardes, muy bien pero me da un error al tratar de guardar el primer registros mensaje: "Se ha producido el error '1004' en tiempo de ejecucion: Error en el metodo 'Range' de objeto _Global"
ResponderEliminarSe detiene en la linea 2: NR = Application.WorksheetFunction.CountA(Range("(A:A"))
Este es el siguiente codigo donde manda el mensaje:
Private Sub cmdGuardar_Click()
Sheets("Base").Select
NR = Application.WorksheetFunction.CountA(Range("(A:A"))
If ComboBoxname = "" Then
MsgBox "Falta el Nombre"
ComboBoxname.SetFocus
Exit Sub
... continua.
ME pasa lo mismo a que se debe o como se corrige?
EliminarEs necesario declara NR como variable? y de que tipo ?
EliminarSon las comillas CountA(Range("A:A")) deben estar dentro de los paréntesis donde estas especificando el range.
Eliminaraparte de las comillas, tiene un parentesis de mas(en la primera A) deberia quedar asi:
Eliminar(Range("A:A"))
TIENE LIMITE DE FILAS QUE SE PUEDAN COLOCAR? POR QUE CUANDO QUIERO PONER UN NUEVO ARTICULO ME DICE INSERTADO EN LA FILA 493 Y AL PONER OTRO LO PONE EN LA MISMA FILA
ResponderEliminarno tiene limite de filas, salvo que llenes todo el libro 1048576 filas en excel 2007 y 2010
Eliminarami tambien me los pone en la misma fila al llegar a un limite
ResponderEliminarBuena tarde, finalice el código, pero en el momento que doy click al botón FORMULARIO INICIO, me sale un error 424 en tiempo de ejecución, cuando le doy depurar me traslada al fmrinicio.show, que puede estar mal?
ResponderEliminarverifica que este bien escrito el nombre del formulario y respetando las mayúsculas
EliminarHOLA..al ingresar los datos lo hace todos en la misma fila, borra los primeros e ingresa los siguientes, ayuda please
ResponderEliminarverifica las celdas y la variable del contador nr
Eliminarhola buenas por que no puedo seguir, he añadido un txt y se me queda en TXTHOLA.SetFocus
ResponderEliminarIf TXTHOLA = "" Then
MsgBox "pon algo"
TXTHOLA.SetFocus
Exit Sub
End If
tal vez en la parte final te falta añadir
EliminarCells(NR + 1, 5) = Val(TXTHOLA)
lo que quiero poner es mas de cuatro, cuadros de texto(TXT)
ResponderEliminarno me deja.
MECESITO SABER COMO LE HAGO PARA QUE LOS CODIGOS NO SE REPITAN , QUE AL INSERTAR UN CODIGO , SI YA ESTA REGISTRADO ME MANDE EL MSJ QUE EL CODIGO YA EXISTE ,AUXILIO
ResponderEliminarhttp://macrosexcel.blogspot.pe/p/ingresar-datos-excel-desde-un-formulario.html
EliminarTengo el siguiente código y me marca el error "Error de compilación, error de sintaxis".
ResponderEliminarPrivate Sub Cbenviar_Click()
If txtfecha = "" Or txthora = "" Or ListBoxjuego = "" Or ListBoxdisp = "" Or ListBoxso = "" Or ListBoxnav = "" Or txterror = "" Or txtanterror = "" Or txtcodigo = "" Or ListBoxmodo = "" Or listboxevidencia = "" Then MsgBox "Favor de llenar todos los campos", vbInformation, "Error de captura"
Then
Range("A" & Cells.Rows.Count).End(xlUp).Offset(1).Select
ActiveCell = txtfecha.Value
ActiveCell.Offset(0, 1) = txthora.Value
ActiveCell.Offset(0, 2) = ListBoxjuego.Value
ActiveCell.Offset(0, 3) = ListBoxdisp.Value
ActiveCell.Offset(0, 4) = ListBoxso.Value
ActiveCell.Offset(0, 5) = ListBoxnav.Value
ActiveCell.Offset(0, 6) = txterror.Value
ActiveCell.Offset(0, 7) = txtanterror.Value
ActiveCell.Offset(0, 8) = txtcodigo.Value
ActiveCell.Offset(0, 9) = ListBoxmodo.Value
ActiveCell.Offset(0, 10) = listboxevidencia.Value
End If
MsgBox "Ticket registrado exitosamente", vbOKOnly, "Registro"
txtfecha = ""
txthora = ""
ListBoxjuego = ""
ListBoxdisp = ""
ListBoxso = ""
ListBoxnav = ""
txterror = ""
txtanterror = ""
txtcodigo = ""
ListBoxmodo = ""
listboxevidencia = ""
End If
End Sub
Hola buenas tardes, que excelente trabajo, te agradezco mucho. Me gustaría saber si hay una forma de llenar un número limitado de datos y pasando ése número, se limpié la hoja y se inicie de nuevo.
ResponderEliminarExcelente contribución, muchas gracias por compartir tus conocimientos. Tengo una consulta, después de digitar el código, pongo TAB para que me lleve al siguiente recuadro, pero se va al botón ACEPTAR, que estaré haciendo mal? :-(, porfavor ayúdame. gracias.
ResponderEliminaren visual basic selecciona el formulario, luego vas al menu ver/orden de tabulacion y alli pones el orden que gustes
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarGracias por el aporte,
ResponderEliminarPero tengo una duda, ¿porque cada vez que intento guardarlo me pide que lo guarde como un archivo Nuevo?
guarda el archivo como un libro de excel habilitado para macros
EliminarHola, gracias por tu aporte. Consulta usando la misma programación, ¿Como elijo desde que fila y columna que yo necesite empiece a registrar los datos? ejemplo que los datos comience a registrar desde la fila 10 y la columna b
ResponderEliminargracias muchacho, sos un mazo! mi Dios te proteja!!
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola buenos días, cuando trato de probar el tablero y cargar los primeros datos me sale se ha producido el error 424 en tiempo de ejecución. Se requiere un objeto
ResponderEliminary sale un cursor amarillo en la siguiente linea
TXTRECETARIO.SetFocus
ayuda por favor... gracias
Walter ya solucione el problema anterior, necesito consultarte como debo programar uno de los campos para que solo me reconozca fechas, es decir que me salga la leyenda que el campo debe ser una fecha y no admita texto o números sin las correspondiente / o -
ResponderEliminarSaludos.
Walter como hago para que uno de los TXT me valide y acepte fechas en el siguiente formato ##/##/####.
ResponderEliminarSaludos.
como descargar el ejercicio
ResponderEliminarHola buenas tardes yo tengo una duda para hacer que me muestre un mensaje en el formulario cuando ingresé un dato duplicado
ResponderEliminar