Usar botón de comando para bajar línea

Quiero introducir los datos en una factura desde un formulario, pero lo que no se hacer es para que al pulsar el botón de siguiente línea, me baje a la siguiente línea, para seguir escribiendo . Os pongo una captura

Respuesta
1

Estoy mirando tu imagen y código y noto que al ingresar cada dato ya lo estás moviendo a la hoja... entonces no necesitas un botón para 'bajar de línea' sino solamente para limpiar los controles.

Private Sub CommandButton1_Click()   'botón limpiar
'x Elsamatilde
'limpia controles
TextBox1 = "": TextBox2 = "": TextBox3 = ""
'pasa el foco al primer control
TextBox1.SetFocus
End Sub

'la fila la indica la primer col (en este caso B) que se asume siempre con datos.

Private Sub TextBox1_Change()
'primer fila libre según col B

filx = Range("B65536").end(xlup).Row +1

Range("B" & filx)= TextBox1

End Sub

Private Sub TextBox2_Change()

'primer fila libre según col B

filx = Range("B65536").end(xlup).Row +1

Range("D" & filx)= TextBox2

End Sub

Private Sub TextBox3_Change()

'primer fila libre según col B

filx = Range("B65536").end(xlup).Row +1

Range("E" & filx)= TextBox3

End Sub

El hecho de evaluar siempre la col B es por si algún control queda vacío (no realizas ningún control de contenido) y en ese caso obligo a que todos los datos queden en la misma fila.

PD) Desde la sección Macros de mi sitio podes encontrar otras instrucciones de ejemplo para obtener las primeras filas libres.

Sdos y no olvides valorar esta respuesta.

Elsa

Hola Elsa, gracias por responderme, pero no te he entendido he puesto en el botón de línea siguiente el código que me has puesto, y si me limpia el formulario, pero también me borra lo añadido en la fila B.

El resto del código que me has puesto no se muy bien si debo de borrar lo que tengo yo en los text box y pegar tus códigos pero lo he hecho solamente en el text box 2 y me da error . A ver si me lo puedes explicar donde poner cada cosa . Gracias Elsa

Cada Private Sub... End Sub que te dejé marcado en negrita debes colocar en tu formulario quitando los tuyos.

Si te marca algún error debes indicarme cual y en qué línea, quizás solo falte que declares la variable:

Dim filx as Long en cada subrutina que la utilice:

Private Sub TextBox1_Change()
'primer fila libre según col B

Dim filx as Long

filx = Range("B65536").end(xlup).Row +1   '(*)

Range("B" & filx)= TextBox1

End Sub

No se si tendrás más código o más controles, en ese caso sería conveniente que me envíes en un libro vacío el Userform para ajustarlo. Mis correos aparecen en la portada de mi sitio.

(*) Hay más modos de buscar la fila libre, esta es la forma más clara de comprender: Se busca la primer fila ocupada desde el final de la hoja y se suma 1 para bajar a la vacía.

Sdos!

Hola Elsa he sustituido todo el código de mis text box por el tuyo y no funciona bien, te pongo un enlace a mega donde he subido una copia del archivo.

https://mega.co.nz/#!AcV2WZYJ!s44fHrqewDR9sdm2WZaP2Uqs6aWTW_kDeso8oSKJ1OE 

A ver que tengo por ahí liado, Gracias una vez más.

Definitivamente tendrás más de un problema pasando los datos directamente. Una factura debe contener datos precisos, así que el botón te debe servir para verificar que todos los datos estén y que además sean correctos.

Quitá todo el código y coloca estos. Estoy evaluando que los datos sean numéricos, que no falte ninguno y recién entonces se guarda en la col B.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'se controla que el dato sea numérico
If TextBox1 = "" Then Exit Sub
If Not IsNumeric(TextBox1) Then Cancel = True
End Sub

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'se controla que el dato sea numérico
If TextBox3 = "" Then Exit Sub
If Not IsNumeric(TextBox3) Then Cancel = True
End Sub

Private Sub CommandButton1_Click()
'x Elsamatilde
'primero se controlan contenidos
If TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Then
MsgBox "Faltan datos"
TextBox1.SetFocus
Exit Sub
End If

'primer fila libre según col B
filx = Range("B65536").End(xlUp).Row + 1
'se guardan los datos
Range("B" & filx) = Val(TextBox1) 'por ser valor numérico
Range("D" & filx) = TextBox2
Range("E" & filx) = CDbl(TextBox3) 'por ser valor decimal

'limpia controles
TextBox1 = "": TextBox2 = "": TextBox3 = ""
'pasa el foco al primer control
TextBox1.SetFocus
End Sub

Al texto del botón le podes poner algo como GUARDAR - SIGUIENTE LÍNEA, modificando la propiedad WordWrap a True.

Si necesitas tu libro solicitamelo a mi correo.

Sdos

Elsa

Hola Elsa, funciona casi perfecto, solo en la línea primera en concepto lo deja en blanco, me lo puedes revisar .Te pongo una captura, cuanto puedas y tengas tiempo bastante me estas ayudando ya.

Gracias

No, no hay ningún problema con el código, te dejo la imagen de mis pruebas. Selecciona esa celda(D14) y observa en la barra de fórmula el texto que aparece, quizás solo tengas la fuente de color blanca que no te permite verlo.

Si tienes más macros también debes revisarlas por si alguna interfiere en este proceso.

Sdos!

Perdona Elsa pero como no me pegaste el código del text box, pues no funcionaba, he copiado el código del text box 3 0 del 1 es el mismo, pero me da error en el text box 2 porque me pide un dato numérico y hay voy a introducir texto y números . por ejemplo, caja lapiceros 24 UD

Un saludo

Perdon Elsa , ya lo consegui le puse el codigo anterior , que me pusiste para el text box y ya me deja escribir texto y numeros . Creo que con esto esta todo solucionado , espero que si me surge alguna duda , pueda contar de nuevo con tu ayuda .

Muchas Gracias de Corazon.

Un saludo

Mil disculpas por no explicarlo, efectivamente no pegue el código del textbox2 porque no tiene o no le hace falta nada

No necesitas ninguna rutina, el texto se pega desde la macro del botón de comando.

Sdos!

1 respuesta más de otro experto

Respuesta

Copia esto.
TextBox2. SetFocus

Hola he colocado en el botón de comando y no funciona no, hace lo que yo quiero que es que borre los datos del formulario y vuelva a poder poner otro articulo en la línea de abajo :

Esto es lo que tengo puesto en el formulario:

Private Sub CommandButton1_Click()
TextBox2.SetFocus
End Sub

Private Sub Label1_Click()

End Sub

Private Sub TextBox1_Change()
Range("B14").Select

ActiveCell.FormulaR1C1 = TextBox1
End Sub

Private Sub TextBox2_Change()
Range("D14").Select

ActiveCell.FormulaR1C1 = TextBox2

End Sub

Private Sub TextBox3_Change()
Range("E14").Select

ActiveCell.FormulaR1C1 = TextBox3
End Sub

Si termino de escribir en E14 que es la primera línea, quiero que al pulsar el botón siguiente línea, se borren los datos de el formulario para introducir otros y se ponga para volver a escribir en la columna B pero en la fila siguiente.

No se si me entendéis.

Un saludo

Te agradecería que subieras el archivo para poder ver lo que quieres.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas