Formularios en Tablas

10 envíos / 0 nuevos
Último envío
Jesus_2012
Imagen de Jesus_2012
Offline
última acción: Hace 9 años 7 meses
Nivel 1 - 200 puntos
alta: 17/05/2011 - 15:42
Puntos: 390
Formularios en Tablas

 

Hola, buen día

Me gustaría saber si alguien me puede ayudar con un código que hice VB, cree un formulario para ingresar unos datos que se fueran llenando en una tabla. Sin embargo cuando doy click en el command button para ingresar los datos a la tabla, no me llena nada de la tabla y automáticamente me genera espacios, es decir, me brinca lineas del tamaño actual de la tabla.

Dejo el lenguaje haber si alguien me puede ayudar.

Gracias!

CÓDIGO

Private Sub CommandButton1_Click()

ActiveSheet.Unprotect
Sheets("D").Select
Range("E1").Select

Do While ActiveCell <> Empty
    ActiveCell.Offset(1, 0).Select
    ListBox1.AddItem ActiveCell
Loop

Sheets("D").Select
Range("i1").Select

Do While ActiveCell <> Empty
    ActiveCell.Offset(1, 0).Select
    ListBox6.AddItem ActiveCell
Loop

Sheets("D").Select
Range("g1").Select

Do While ActiveCell <> Empty
    ActiveCell.Offset(1, 0).Select
    ListBox4.AddItem ActiveCell
Loop


Sheets("RED DE CONTACTOS").Select

Range("Table2[#All]").Select

End Sub

Private Sub CommandButton10_Click()

Range("Table2[#All]").Select
Selection.EntireRow.Insert
TextBox1 = Empty
TextBox2 = Empty
TextBox3 = Empty
TextBox4 = Empty
TextBox5 = Empty
TextBox6 = Empty
TextBox7 = Empty
TextBox8 = Empty
TextBox9 = Empty
ListBox1 = Empty
ListBox4 = Empty
ListBox6 = Empty
Range("Table2[#All]").Select

ActiveWorkbook.Save

UserForm1.Hide
End Sub

Private Sub ListBox1_Click()

Sheets("RED DE CONTACTOS").Select
Range("Table2[#a1]").Select
ActiveCell.FormulaR1C1 = ListBox1
End Sub
Private Sub ListBox4_Click()
Sheets("RED DE CONTACTOS").Select
    Range("Table2[e1]").Select
ActiveCell.FormulaR1C1 = ListBox2
End Sub
Private Sub ListBox6_Click()
Sheets("RED DE CONTACTOS").Select
    Range("Table2[f1]").Select
ActiveCell.FormulaR1C1 = ListBox3
End Sub
Private Sub TextBox1_Change()
Range("Table2[c1]").Select
ActiveCell.FormulaR1C1 = TextBox1
End Sub
Private Sub TextBox2_Change()
Range("Table2[d1]").Select
ActiveCell.FormulaR1C1 = TextBox2
End Sub
Private Sub TextBox3_Change()
Range("Table2[g1]").Select
ActiveCell.FormulaR1C1 = TextBox3
End Sub
Private Sub TextBox4_Change()
Range("Table2[h1]").Select
ActiveCell.FormulaR1C1 = TextBox4
End Sub
Private Sub TextBox5_Change()

Range("Table2[i1]").Select
ActiveCell.FormulaR1C1 = TextBox5
End Sub
Private Sub TextBox6_Change()
Range("Table2[j1]").Select
ActiveCell.FormulaR1C1 = TextBox6
End Sub

Private Sub TextBox7_Change()
Range("Table2[k1]").Select
ActiveCell.FormulaR1C1 = TextBox7
End Sub

Private Sub TextBox8_Change()

Range("Table2[#l1]").Select
ActiveCell.FormulaR1C1 = TextBox8
End Sub

Private Sub TextBox9_Change()

Range("Table2[#m1]").Select
ActiveCell.FormulaR1C1 = TextBox9
End Sub


Private Sub UserForm_Click()

End Sub

 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 hora 46 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: Formularios en Tablas

si pudieras adjuntar el archivo con el formulario se podría probar mejor.

¿de todos estos procedimientos cuál se supone que copia los datos a la tabla?

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Jesus_2012
Imagen de Jesus_2012
Offline
última acción: Hace 9 años 7 meses
Nivel 1 - 200 puntos
alta: 17/05/2011 - 15:42
Puntos: 390
Re: Formularios en Tablas

Hola Paco, buen día

Gracias por contestar. Yo creo que básicamente eso es lo que me estaría faltando, un comando que copie los datos que voy ingresando a la tabla. De cualquier forma, te adjunto el archivo donde vienen los comandos para tu revisión. Soy nuevo en esto de programar, gracias por tu asesoria.

Muchas Gracias

Espero tu respuesta.

 

Jesús,

Saludos

AdjuntoTamaño
File Formularios.xlsm70.19 KB
pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 hora 46 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: Formularios en Tablas

algunas observaciones:

-¿por qué no utilizas cuadros combinados en vez de cuadros de lista para elegir el área, tipo de institución y país?

-No utilices el evento Change de los cuadros de texto, porque esto se produce cada vez que cambia una letra, cada vez que tecleas. entiendo que lo que te interesa es escribir todos los datos del usuario y luego copiarlo a la lista.

-el evento que te interesa es el evento clic del botón "Ingresar contacto" vamos a poner el código ahí (en tu caso es el CommandButton10_Click)

¿y qué tiesen en ese evento? (comento lo que haces)

Range("Table2[#All]").Select   ' seleccionas la tabla con los datos (por ejemplo 20 filas"
Selection.EntireRow.Insert   'insertas filas, como tienes 20 seleccionadas, inserta 20 filas
TextBox1 = Empty  ' vacías los cuadros de texto del formulario
TextBox2 = Empty
TextBox3 = Empty
TextBox4 = Empty
TextBox5 = Empty
TextBox6 = Empty
TextBox7 = Empty
TextBox8 = Empty
TextBox9 = Empty
ListBox1 = Empty
ListBox4 = Empty
ListBox6 = Empty
Range("Table2[#All]").Select

ActiveWorkbook.Save

UserForm1.Hide
 

Lo que creo que quuieres hacer es insertar sólo una fila al final de la tabla, y luego poner ahí lo que haya escrito el usuairo en el formulario

después es cuando borrarás el contenido del formulario para la próxima vez que lo utilicen.

¿cómo insertar esa fila al final?

no lo hagas como si insertases una fila, lo tendrás que hacer con las filas de la tabla. La tabla es un objeto ListObject, sus filas son el objeto ListRows

por ejemplo con esto podrás añadir una fila al final de tu tabla (que se llama "Table2")

range("Table2").ListObject.ListRows.Add

¿Cómo escribes en la última fila de la tabla? puedes emplear también el objeto ListRows, para la última fila, que es la que acabas de insertar, para eso puedes utilizar la propiedad Count de ListRows, por ejemplo:

Range("table2").ListObject.ListRows.Count

y ahora te interesa escribir ahí los valores.

puedes hacerlo con el número de orden de las columnas, o utilizando el nombre de las mismas. por ejemplo

Range("Table2").ListObject.ListRows(Range("table2").ListObject.ListRows.Count).Range(1,1).value="hola2"

Ahora para que quede un poco más compacto puedes emplear un bloque With

With Range("Table2").ListObject
    .ListRows(.ListRows.Count).Range(1, 1).Value = ListBox1
    .ListRows(.ListRows.Count).Range(1, 2).Value = TextBox1
    ' así con el resto de tus controles
   
End With

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Jesus_2012
Imagen de Jesus_2012
Offline
última acción: Hace 9 años 7 meses
Nivel 1 - 200 puntos
alta: 17/05/2011 - 15:42
Puntos: 390
Re: Formularios en Tablas

Muchisimas Gracias Paco

Solo que sucede algo anormal.

Cuando estoy escribiendo en la pantalla de captura (formulario), el primer dato de la tabla (1,1), aparece lo que voy escribiendo, es decir, cuando escribo el nombre de la institución en el formulario, comienza a parecer ese nombre que estoy escribiendo en la columna de área y así sucesivamente, cuando termino de escribir la institucion y me voy a puesto y comienzo a escribir puesto, este va apareciendo en la tabla en la posición (1,1) en la columna de área, a que crees se pudiera deber esto?. Todo lo demás funciona a la perfección porque va insertando los datos en la última fila, a excepción de que pasa ese evento.

 

Gracias

 

Saludos,

Jeús

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 hora 46 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: Formularios en Tablas

si aparece en la celda a la vez que lo vas tecleando en el formulario es porque estás empleando el método evento Change del textbox,

mira a ver qué tienes en Private Sub TextBox1_Change( ) y en los otros cuadros de texto.

en cada uno tendrás que escribir en la celda correspondiente, que no es siempre la (1,1), es la (fila 1, columna 1) para el área,
pero será será la (1,2) para el nombre, la (1,3) para la especialización, y así sucesivamente

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Jesus_2012
Imagen de Jesus_2012
Offline
última acción: Hace 9 años 7 meses
Nivel 1 - 200 puntos
alta: 17/05/2011 - 15:42
Puntos: 390
Re: Formularios en Tablas

Paco Gracias por tu respuesta

Te comento que aun sigue el mismo problema. Incluso los listbox tmb hace que al seleccionar las opciones aparezca en la tabla la opción que seleccioné,  entonces tmb el evento click en los listbox, me está provocando ese problema. Trate de cambiar los eventos de los listbox y textbos al evento chaged y se resuelve el problema, pero al momento de volver a darle click al boton para ingresar un nuevo contacto, no se borran los datos anteriores, es decir, me aparecen los datos del usuario que registre por última vez. Conoces algun evento que me pudiera solucionar este problema?, O lo referente a que me comentaste sería:

Private Sub TextBox1_Change()
Range(1,1)Select
ActiveCell.FormulaR1C1 = TextBox1
End Sub

????

Muchas Gracias

 

Saludos,

Jesús

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 hora 46 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: Formularios en Tablas

Personalmente no me gusta esto del evento Change, que escribe cada letra que pongo en el formulario.
Prefiero poder escribir toda la información en el formulario y no copiarlo a la hoja hasta que no pulse el botón "ingresar contacto"
Así tienes la posibilidad de poner otro botón "Cancelar" que permita cerrar el formulario sin añadir el nuevo contacto.

Los datos que escribas en el formulario se quedan en memoria, ten en cuenta que lo que haces es ocultarlo a la vista con .Hide, pero sigue estando ahí con lo que tenga escrito.

Tendrás que borrar el contenido de los cuadros de texto antes de cerrar el formulario, esto ya lo tenías en el código inicial.

El problema es que esto activará de nuevo el evento Change de los cuadros de texto, porque borrar su contenido también es cambiar.

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Jesus_2012
Imagen de Jesus_2012
Offline
última acción: Hace 9 años 7 meses
Nivel 1 - 200 puntos
alta: 17/05/2011 - 15:42
Puntos: 390
Re: Formularios en Tablas

Hola Paco, gracias por responder

Te escribo para preguntarte un problema que surgio com el bloque with, que me hiciste favor de ayudar.

En primer lugar, si se inserta la información del formulario al final de la fila, pero el problema se presenta cuando trato de ingresar un nuevo contacto la tabla ya que esta no se expande, es decir, no se van agregando renglones a la tabla, por lo que me reemplaza la información de la ultima fila.

A que puedes atribuir este problema?

Muchas gracias!

 

Saludos,

Jesús

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 hora 46 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
imagino que...

imagino que olvidaste añadir una fila antes de copiar los datos

range("Table2").ListObject.ListRows.Add

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.