Excel - rellenar filas con formulario

   
Vista:

rellenar filas con formulario

Publicado por Mª Auxilio (19 intervenciones) el 09/03/2015 19:35:49
Hola amigos
Tengo un formulario que al rellenarlo me inserta una fila cada vez que lo ejecuto
y Tengo en el código de vb esta instrucción:

For Fila = 5 To 30000
If Hoja1.Cells(Fila, 1) = "" Then
Final = Fila
Exit For
End If
Next

El problema es que con el tiempo voy a necesitar bastantes más de 30000 filas
y si pongo por ejemplo For Fila = 5 To 40000, al ejecutar el formulario me da error
Como puedo hacer para que mis datos pudieran llegar por ejemplo hasta la fila 150000
Se supone que excel 2007 tiene más de un millón de filas por hoja, no ?

Espero haberme explicado
subo archivo en zip
Gracias por anticipado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

rellenar filas con formulario

Publicado por Legarda (68 intervenciones) el 09/03/2015 21:24:24
Buenas tardes
Es fácil,
1. la variable Fila dimencionala Long
dim Fila As Long

2. un ciclo que encuentra la ultima fila ingresada

Fila = 1
while Hoja1.Cells(Fila, 1) <> empty
Fila = Fila + 1
wend
Hoja1.Cells(Fila, 1).value = TusDatos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Mª Auxilio (19 intervenciones) el 09/03/2015 22:37:41
Hola de nuevo y gracias por contestar, verás de vb sé muy poquito, y este es un trabajo que me han encargado en la empresa porque sé algo de excel, pero me viene bastante grande ,....ya me entiendes.
Me podrías aclarar un poquito más a que te refieres con TusDatos Supongo que se referirá a algo de celdas o de filas pero no sé bien como ponerlo en el código.
Ponga lo que ponga siempre me da error y al entrar a depurar me resalta en amarillo esta línea: Hoja1.Cells(Final, 1) = Me.TextBox1.

Gracias anticipadas y un saludo
Chilo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Legarda (68 intervenciones) el 09/03/2015 22:57:21
Buenas tardes
que dice el error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Mª Auxilio (19 intervenciones) el 09/03/2015 23:30:28
Se ha producido el error 1004 en tiempo de ejecución
Error definido por la aplicación o el objeto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Khristian (7 intervenciones) el 09/03/2015 23:52:01
Opciones:

1.- Quizá deberías insertar el nuevo registro siempre como primera fila. (Orden descendente)
Porque...?
- Porque cuando un usuario ingresa un registro en un sistema quiere ver que este se ingresó satisfactoriamente. Tu formulario de ingreso no envía ninguno mensaje (Claro... estamos hartos de tanta ventana emergente, mas si es por algo satisfactorio)... entonces sería bueno que quede como primer registro, así el usuario lo verá. (Imagina que tenga que bajar hasta el registro 39000 para asegurarse que su registro fue agregado.

' Inserta nueva fila para nuevo registro. Desplaza hacia abajo los registros existentes.
Sub InsertarFila()
Range("A5").Select
Selection.EntireRow.Insert
End Sub

Este procedimiento posiciona el cursor en la primera fila y columna de tu tabla e inserta una nueva fila, para ingresar el nuevo registro.


- Porque te sería mas fácil.
Así no tienes que estar determinando el ultimo registro y el nuevo registro lo insertar siempre en primer lugar, y al insertar una nueva fila, las demás se desplazan.

- Si el orden de los registros exige que queden en orden ascendente (tal como se ingresan), deles un folio y puedes aplicar un boton para ordenar, ordenar después de agregar, ordenar al exportar, ordenar al imprimir... etc.


2.- Para determinar la fila donde insertar el nuevo registro, no necesitar recorrer toda la columna para llegar a la ultima + 1 (o siguiente celda vacía)

En tu programación puedes usar:

'Busca siguiente fila donde insertar registro nuevo
Sub buscarNuevaFila()
On Error GoTo hayError

Range("A5").Select
If Range("A5").Value <> "" Then
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Activate
End If
Exit Sub

hayError:
Range("A3").Select
End Sub

Este procedimiento posiciona el cursor en la primera fila y columna de tu tabla.
Si la tabla está vacía, dejará el cursor en posición para insertar el primer registro.
Las siguientes veces, se desplazará hasta la ultima fila con registro creado, y moverá el cursor una fila mas abajo.

Los dos primeros registros tienen un tratamiento distinto, pues al desplazar a la ultima fila con datos, te llevan al final de la hoja, por eso el manejo de errores.

Esta es solo una simple implementación del método abreviado CTRL + Flecha Abajo, que te lleva a la ultima fila con datos dentro de una columna.


----------------------

En ambos casos, luego de llamar al procedimiento, ejecutas tu codigo de insercion del registro.


Saludos.

Espero te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Mª Auxilio (19 intervenciones) el 10/03/2015 00:01:33
Bueno mañana lo miro, yo no sé donde estás tú pero yo estoy en España y son las 12 de la noche, hora de irse a dormir que a las 6:30 ya suena el despertador..... Has sido muy amable. Mañana por la tarde lo pruebo y te digo algo.
Muchas gracias y hasta mañana
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Legarda (68 intervenciones) el 10/03/2015 13:08:28
Buenos días las dos soluciones que te di están claras dimenciona "Dim" la variable Fila a long o reemplaza el codigo que te puse mas arriba
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Mª Auxilio (19 intervenciones) el 10/03/2015 16:43:27
Hola Legarda, buenas tardes; Acabo de insertar los códigos que me indicas: ' Inserta nueva fila para nuevo registro. Desplaza hacia abajo los registros existente y 'Busca siguiente fila donde insertar registro nuevo. Y cuando he rellenado el formulario y le doy a insertar no hace nada. Tendría tal vez que eliminar parte del código que ya tenía? No sé, estoy un poco perdida.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Legarda (68 intervenciones) el 10/03/2015 18:40:45
Te veo como enredado mmmmm
tienes que quitar el For
osea quitar este codigo
For Fila = 5 To 30000
If Hoja1.Cells(Fila, 1) = "" Then
Final = Fila
Exit For
End If
Next

lo que hace este codigo es buscar la ultima Fila reemplaza lo por

Fila = 5
while Hoja1.Cells(Fila, 1) <> empty
Fila = Fila + 1
wend



ahora bien tienes que poner esa variable Fila asi Dim Fila as Long
para que no te saque error de mas de 30000 filas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Khristian (7 intervenciones) el 10/03/2015 19:22:19
Veo que Legarda siguió un hilo equivocado.

Los códigos que te di, deben ser llamados antes de que comiences el traspaso de los datos desde el formulario a la fila.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Legarda (68 intervenciones) el 10/03/2015 20:05:56
Buenas tardes.
equivocado?
dame una buena razón
al contrario es una solución optima, ya que el problema inicial es "El problema es que con el tiempo voy a necesitar bastantes más de 30000 filas
y si pongo por ejemplo For Fila = 5 To 40000, al ejecutar el formulario me da error"
aunque no especifica el error, yo se que es por que no esta soportando el numero tan elevado por eso le digo dimencionalo como Long
ahora bien ese For es una mala practica por que esta restringiendo el numero de Filas máximas a usar por eso la variables long
ademas te digo que tus soluciones yo como desarrollador de Excel no las usaría
1. "Quizá deberías insertar el nuevo registro siempre como primera fila", si hay datos o listas en paralelo o en filas inferiores se te va a dañar el formato o diseño, otro problema es que agregar botones para ordenar solo por ese tema es tiempo innecesariamente perdido

Es mas viable la opción el endDown pero puede causar varios errores entre ellos que solo halla un registro
en este orden de ideas como puedo estar siguiendo un hilo equivocado

si mi solucion solo es cambias lo que el tiene supongo yo
Dim Fila as integer por
Din Fila as long


Ser programador no es dar la solución mas compleja sino la mas optima
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Khristian (7 intervenciones) el 11/03/2015 19:24:43
Seguir el Hilo.... es responder en el hilo que llevas no otro.
Si respondes en otro hilo, confundes.

Ejemplo:

Pregunta Principal
---> Respuesta 1
---> Respuesta 2

Como vez una pregunta puede tener tantas respuestas como usuarios las respondan.

Si el usuario del tema repregunta, pasa esto.

Pregunta Principal
---> Respuesta 1
--------> Repregunta 1
---> Respuesta 2

Aquí el usuario que respondió inicialmente (Respuesta 1), va a responder la repregunta, quedando así.

Pregunta Principal
---> Respuesta 1
--------> Repregunta 1
--------------> Respuesta a Repregunta 1
---> Respuesta 2

Por lo tanto si pasara esto:
Pregunta Principal
---> Respuesta 1
--------> Repregunta 1
---> Respuesta 2
--------> Repregunta 2

O sea, si el autor del tema repregunta a los dos usuarios que respondieron... El autor de la respuesta 2 debe responder en el hilo de su respuesta.... NO en el hilo de la respuesta 1....

Por estas cosas se producen desordenes y confunden a la gente que pregunta y a los que visitan el post.


----------------------------------

Ahora... hablando de desarrollo de sistemas... y esas cosas

"y si pongo por ejemplo For Fila = 5 To 40000"

No puedes recomendar un bucle que recorra 39995 filas para determinar la posición del siguiente nuevo registro. (Cuando ya van obviamente esa cantidad de registros), puede funcionar, pero el error fue mio, pues pensé que el foro era de Excel Avanzado o VBA, acabo de ver que es solo de Excel.

Ese bucle de mas de 30 mil filas se hace en programación así:
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Activate
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Mª Auxilio (19 intervenciones) el 10/03/2015 20:24:02
Chicos agradezco mucho vuestra ayuda, pero me rindo, no hay forma de que me funcione, le he dado tantas vueltas, he cambiado tantas cosas por otras que ahora mismo no sé donde estoy. Gracias por todo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Legarda (68 intervenciones) el 10/03/2015 20:41:17
Adjuntame el archivo yo te lo arreglo
y te explico el cambio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Mª Auxilio (19 intervenciones) el 10/03/2015 20:53:54
Ya lo subí la primera vez que escribí
Lo subo de nuevo
Gracias Legarda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

rellenar filas con formulario

Publicado por Legarda (68 intervenciones) el 10/03/2015 21:27:45
No te puedo adjuntar el archivo por que requiero estar logueado y en este momento no puedo crear una cuenta mas sin embargo has esto

habré el código --- habre el userForm1 --- da doble clic en el botón insertar para abrir el código y reemplaza todo ese código con este como podrás ver solo cambie al principio las variables de integer a Long que soporta un numero mas elevado de filas y en el For puse el máximo de filas de excel, eso era todo y no te complicas con nada mas como te quería enredar la otra persona



Private Sub CommandButton1_Click()
Dim Fila As Long
Dim Final As Long
Dim Registro As Integer

'valida que los campos no esten vacios
If Me.TextBox1.Value = "" Or Me.TextBox2.Value = "" Or Me.TextBox3.Value = "" Or Me.ComboBox1.Value = "" Then
MsgBox "Debe completar la informacion, Hay campos vacios"
Me.TextBox1.SetFocus
Exit Sub
End If



'Determina el final del listado
For Fila = 5 To 1048576
If Hoja1.Cells(Fila, 1) = "" Then
Final = Fila
Exit For
End If
Next


'Envía los datos a la hoja1
Hoja1.Cells(Final, 1) = Me.TextBox1.Text
Hoja1.Cells(Final, 2) = Me.TextBox2.Text
Hoja1.Cells(Final, 3) = Me.TextBox3.Text
Hoja1.Cells(Final, 4) = Me.TextBox4.Text
Hoja1.Cells(Final, 5) = Me.ComboBox1.Text
Hoja1.Cells(Final, 6) = Me.TextBox5.Text
Hoja1.Cells(Final, 7) = Me.TextBox6.Text
Hoja1.Cells(Final, 8) = Me.ComboBox2.Text
Hoja1.Cells(Final, 9) = Me.TextBox7.Text
Hoja1.Cells(Final, 10) = Me.TextBox10.Text
Hoja1.Cells(Final, 11) = Me.TextBox8.Text
Hoja1.Cells(Final, 12) = Me.TextBox9.Text
Hoja1.Cells(Final, 13) = Me.TextBox11.Text
Hoja1.Cells(Final, 14) = Me.TextBox12.Text

'Limpia los controles
Me.TextBox1.Text = ""
Me.TextBox2.Text = ""
Me.TextBox3.Text = ""
Me.TextBox4.Text = ""
Me.TextBox5.Text = ""
Me.TextBox6.Text = ""
Me.TextBox7.Text = ""
Me.TextBox8.Text = ""
Me.TextBox9.Text = ""
Me.TextBox10.Text = ""
Me.TextBox11.Text = ""
Me.TextBox12.Text = ""
Me.ComboBox1.Text = ""
Me.ComboBox2.Text = ""
Me.TextBox1.SetFocus



End Sub


Private Sub CommandButton2_Click()
Sheets("BD").Select
Unload Me
End Sub



Private Sub UserForm_Initialize()

ComboBox1.AddItem ("Purin")
ComboBox1.AddItem ("Gallinaza")
ComboBox1.AddItem ("Vacuno")
ComboBox1.AddItem ("Ovino")
ComboBox2.AddItem ("6427HYN")
ComboBox2.AddItem ("9647GLY")
ComboBox2.AddItem ("7195HPK")

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

rellenar filas con formulario

Publicado por Mª Auxilio (19 intervenciones) el 10/03/2015 22:51:39
Muchas gracias Legarda, funciona correctamente
Un saludo
Chilo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

rellenar filas con formulario

Publicado por Khristian (7 intervenciones) el 11/03/2015 19:58:19
Te dejo Link para descargar el Excel ya modificado, pruebalo y me cuentas.

https://www.dropbox.com/s/0x8mqnd729c030z/Gestion%20Fertiliz%20A.xlsb?dl=0

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar