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 Do While ActiveCell <> Empty Sheets("D").Select Do While ActiveCell <> Empty Sheets("D").Select Do While ActiveCell <> Empty Range("Table2[#All]").Select End Sub Private Sub CommandButton10_Click() Range("Table2[#All]").Select ActiveWorkbook.Save UserForm1.Hide Private Sub ListBox1_Click() Sheets("RED DE CONTACTOS").Select Range("Table2[i1]").Select Private Sub TextBox7_Change() Private Sub TextBox8_Change() Range("Table2[#l1]").Select Private Sub TextBox9_Change() Range("Table2[#m1]").Select End Sub
Sheets("D").Select
Range("E1").Select
ActiveCell.Offset(1, 0).Select
ListBox1.AddItem ActiveCell
Loop
Range("i1").Select
ActiveCell.Offset(1, 0).Select
ListBox6.AddItem ActiveCell
Loop
Range("g1").Select
ActiveCell.Offset(1, 0).Select
ListBox4.AddItem ActiveCell
Loop
Sheets("RED DE CONTACTOS").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
End Sub
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()
ActiveCell.FormulaR1C1 = TextBox5
End Sub
Private Sub TextBox6_Change()
Range("Table2[j1]").Select
ActiveCell.FormulaR1C1 = TextBox6
End Sub
Range("Table2[k1]").Select
ActiveCell.FormulaR1C1 = TextBox7
End Sub
ActiveCell.FormulaR1C1 = TextBox8
End Sub
ActiveCell.FormulaR1C1 = TextBox9
End Sub
Private Sub UserForm_Click()
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.
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
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.
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
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.
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
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.
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
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.