............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

problema con una macro que inserta formula

Ver el tema anterior Ver el tema siguiente Ir abajo

problema con una macro que inserta formula

Mensaje por Emiliano Galasso el Jue Nov 25, 2010 11:42 am

El problema es que cuando doy ingresar, inserta todo pero el código en una fila y los datos en la siguiente fila en vez de insertar todo en la misma fila. No logro encontrar el problema.
La idea es que la formula genere un código con el apellido y un número correlativo (la formula la modifique de otro foro que me parecio una buena idea).
Se agradece desde ya una manito.
Saludos,
Emiliano
avatar
Emiliano Galasso

Masculino Cantidad de envíos : 40
Edad : 45
Ciudad - Pais : Montevideo-Uruguay
Version de Excel : 2003-2007
Fecha de inscripción : 15/10/2010

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por GalileoGali el Jue Nov 25, 2010 12:41 pm

reduce tu archivo al area hoja del problema indica en que línea de tu codigo surge el problema, abrevianos el tiempo de encontrar falencias

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por Emiliano Galasso el Jue Nov 25, 2010 4:35 pm

Cuando clickeo en el botón ingresar del formulario, ingresa el código donde debe ir (celda A2 por ejemplo) pero el resto de los datos los inserta en la fila siguiente (B3, C3...). Puse un ejemplo para que vean como queda.
Saludos,
Emiliano
PD:
dejo el código copiado aquí:
Código:
Private Sub cmd_ingresar_Click()
'Aquí es donde tengo el error, cuando clickeo en ingresar pone el código donde corresponde pero el resto de los datos
'se insertan en la siguiente fila.
Dim Fila As Long
Dim codigo As String
ActiveCell.FormulaR1C1 = "=LEFT(R[2]C[1],2)&RIGHT(R[2]C[1],2)&RIGHT(YEAR(R[2]C[4]),2)&TEXT(ROWS(R[2]C:R2C),""-0000"")"
codigo = ActiveCell.FormulaR1C1

If txt_apellidos.Text = "" Or txt_nombres.Text = "" Or txt_apto.Text = "" Or txt_calle.Text = "" Or txt_cedula.Value = "" Or txt_celular.Value = "" _
Or txt_celular1.Value = "" Or txt_celular2.Value = "" Or txt_entrecalle.Text = "" Or txt_fechanacimiento.Value = "" Or txt_madre.Text = "" Or txt_mail.Value = "" Or _
txt_mail1.Value = "" Or txt_mail2.Value = "" Or txt_manzana.Text = "" Or txt_nro.Value = "" Or txt_padre.Text = "" Or txt_pareja.Text = "" Or txt_solar.Text = "" Or _
txt_telefono.Value = "" Or txt_tutor.Text = "" Or cbo_ciudades.Text = "" Or cbo_departamento.Text = "" Or cbo_mail1.Text = "" Or cbo_mail2.Text = "" Or cbo_pertenececel1.Text = "" Or cbo_pertenececel2.Text = "" Then
MsgBox ("No debes dejar casilleros vacíos, si no se tienen datos completar con Sin Datos, gracias")

Else

Range("A2").Select
'Hasta que no encuentre una columna vacía siga desplazandoce
Do While ActiveCell <> Empty
'Nos desplazamos una fila hacia abajo
ActiveCell.Offset(1, 0).Select
Loop
Fila = ActiveCell.Row 'Range("A65536").End(xlUp).Row + 1 'ActiveCell.Row

codigo = Range("A" & Fila)
ActiveCell = Val(cbo_fibroquistico)
Range("A" & Fila) = cbo_fibroquistico
Range("B" & Fila) = txt_apellidos
Range("C" & Fila) = txt_nombres
Range("D" & Fila) = txt_cedula
Range("E" & Fila) = txt_fechanacimiento
Range("F" & Fila) = txt_calle
Range("G" & Fila) = txt_nro
Range("H" & Fila) = txt_apto
Range("I" & Fila) = txt_manzana
Range("J" & Fila) = txt_solar
Range("K" & Fila) = txt_entrecalle
Range("L" & Fila) = cbo_ciudades
Range("M" & Fila) = cbo_departamento
Range("N" & Fila) = txt_telefono
Range("O" & Fila) = txt_celular
Range("P" & Fila) = txt_mail
Range("Q" & Fila) = txt_madre
Range("R" & Fila) = txt_padre
Range("S" & Fila) = txt_tutor
Range("T" & Fila) = txt_pareja
Range("U" & Fila) = txt_celular1
Range("V" & Fila) = cbo_pertenececel1
Range("W" & Fila) = txt_mail1
Range("X" & Fila) = cbo_mail1
Range("Y" & Fila) = txt_celular2
Range("Z" & Fila) = cbo_pertenececel2
Range("AA" & Fila) = txt_mail2
Range("AB" & Fila) = cbo_mail2
Range("a1").End(xlDown).Select
'txt_nrocobro = ActiveCell.Value + 1
End If

End Sub

avatar
Emiliano Galasso

Masculino Cantidad de envíos : 40
Edad : 45
Ciudad - Pais : Montevideo-Uruguay
Version de Excel : 2003-2007
Fecha de inscripción : 15/10/2010

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por GalileoGali el Sáb Nov 27, 2010 1:50 pm

Quien es ActiveCell, al hacer click en "Ingresar"??????

Aún a pesar de haber reducido tu código, no dices en concreto en qué linea se produce tu problema. Depura el código en un Paso a Paso, pero establece antes quien es ActiveCell, y a raiz de que es tal o cual celda......

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por Emiliano Galasso el Sáb Nov 27, 2010 10:27 pm

La celda activa es A2 (range("A2").select)
El problema lo tengo con este código:
codigo = ActiveCell.FormulaR1C1
codigo = "=LEFT(R[-2]C[1],2)&RIGHT(R[-2]C[1],2)&RIGHT(YEAR(R[-2]C[4]),2)&TEXT(ROWS(R[-2]C:R2C),""-0000"")"

Si lo pongo antes del if (o sea, después de dim codigo as string) inserta el código pero el resto de los datos (los que están después del Loop) los inserta en la fila siguiente. Esto es porque, cuando va a insertar los datos ve que la celda A2 tiene "algo" y pasa a la siguiente celda.
Cuando pongo el codigo después del Loop, no inserta el código pero si los datos.
Es como si el código y el resto de los datos están "divorciados" y no logro juntarlos, jeje. Fuera de broma, el tema me parece es que trata la formula y los datos como "cosas" separadas y no los inserta juntos en la misma fila.
Si pongo la formula después del Loop (antes del Loop, dentro del Loop) es como si no hubiese puesto nada, si pongo la formula antes del if pasa lo que dije primero, inserta la formula y en la siguiente fila los datos.
En fin, hay algo que estoy haciendo mal y no logro darme cuenta.
avatar
Emiliano Galasso

Masculino Cantidad de envíos : 40
Edad : 45
Ciudad - Pais : Montevideo-Uruguay
Version de Excel : 2003-2007
Fecha de inscripción : 15/10/2010

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por GalileoGali el Sáb Nov 27, 2010 11:33 pm

mIENTRAS QUE ACA HABLAS DE -2

"=LEFT(R[-2]C[1],2)&RIGHT(R[-2]C[1],2)&RIGHT(YEAR(R[-2]C[4]),2)&TEXT(ROWS(R[-2]C:R2C),""-0000"")"
antes ponias

"=LEFT(R[2]C[1],2)&RIGHT(R[2]C[1],2)&

Por otra parte son tantas las cosas que corregiria y ademas tantas las que no llego a entender qué es lo que quieres lograr, que declaro mi abandono del tema....

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por Logroastur el Mar Nov 30, 2010 7:10 am

Buenas no se si te he llegado a entender pero prueba colocando lo siguiente

Código:

Private Sub cmd_ingresar_Click()
Dim Fila As Long, codigo As String, x, i
x = frm_registrofq.Controls.Count
For i = 0 To x - 1
    Select Case TypeName(frm_registrofq.Controls(i))
        Case "TextBox"
            If frm_registrofq.Controls(i) = Empty Then MsgBox "Rellene todos los datos", , "": _
            frm_registrofq.Controls(i).SetFocus: Exit Sub
               
        Case "ComboBox"
            If frm_registrofq.Controls(i) = Empty Then MsgBox "Rellene todos los datos", , "": _
                frm_registrofq.Controls(i).SetFocus: Exit Sub
    End Select
Next i
Range("A" & Rows.Count).End(xlUp)(2) = "=LEFT(RC[1],2)&RIGHT(RC[1],2)&RIGHT(YEAR(RC[4]),2)&TEXT(ROWS(R1C:RC),""-0000"")"
codigo = Range("A" & Rows.Count).End(xlUp)
Fila = Range("A" & Rows.Count).End(xlUp)(2).Row
Range(Range("A" & Fila), Range("AB" & Fila)) = Array(cbo_fibroquistico, txt_apellidos, _
        txt_nombres, txt_cedula, txt_fechanacimiento, txt_calle, txt_nro, txt_apto, _
        txt_manzana, txt_solar, txt_entrecalle, cbo_ciudades, cbo_departamento, _
        txt_telefono, txt_celular, txt_mail, txt_madre, txt_padre, txt_tutor, _
        txt_pareja, txt_celular1, cbo_pertenececel1, txt_mail1, cbo_mail1, _
        txt_celular2, cbo_pertenececel2, txt_mail2, cbo_mail2)
Range("a1").End(xlDown).Select
For i = 0 To x - 1
    Select Case TypeName(frm_registrofq.Controls(i))
        Case "TextBox"
            frm_registrofq.Controls(i) = Empty
        Case "ComboBox"
            frm_registrofq.Controls(i) = Empty
    End Select
Next i
End Sub

un saludo
avatar
Logroastur
Moderador
Moderador

Masculino Cantidad de envíos : 32
Edad : 52
Ciudad - Pais : España
Version de Excel : 2007
Fecha de inscripción : 20/11/2010

http://www.foroexcel.com/foro/

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por GalileoGali el Mar Nov 30, 2010 7:42 am

LogroAstur: esperemos que sea lo que Emiliano necesita.... y vaya que lo has hecho prolijo!!!

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por Emiliano Galasso el Mar Nov 30, 2010 1:30 pm

Antes que nada, quiero agradecerles y sepan disculpar a este novato en el tema de la programación, Logroastur, lamentablemente me sigue dando el mismo problema pero, de todas maneras, me parece muy bueno (más bien excelente) la forma en que simplificaste el código que he utilizado (aún me falta para agarrarle bien la mano a la programación y simplificar más el código) por lo que te agradezco de vuelta y voy a comparar ambos códigos para entender más aún esto que para mí es nuevo que es la programación. Al final había logrado solucionar el problema (tanto va el cántaro a la fuente…) pero por cuestión de tiempos no pude subirlo. A continuación voy a explicar como lo solucioné. El problema que tenía es que cuando clickeaba en el botón ingresar, me ingresaba la función para obtener el código en la celda A2 (por ejemplo) y el resto de los datos, en la siguiente fila, B3, C3, etc quedando las celdas B2, C2, etc vacías y la celda A3 también, es decir, me quedaban desfasados el código con el resto de los datos que se ingresan.
Para que no quede muy largo el post, lo divido en dos partes para que quede más claro.
avatar
Emiliano Galasso

Masculino Cantidad de envíos : 40
Edad : 45
Ciudad - Pais : Montevideo-Uruguay
Version de Excel : 2003-2007
Fecha de inscripción : 15/10/2010

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por Emiliano Galasso el Mar Nov 30, 2010 1:31 pm

El código que utilicé es éste con el cual logré solucionar el problema que tenía:

Private Sub cmd_ingresar_Click()
Dim Fila As Long
‘con la primer parte del If establezco que tienen que estar todos los textbox y los combobox (menos el cbo_fibroquístico) llenos, no pueden estar vacíos y, si hay alguno vacío, que muestre el mensaje. El cbo_fibroquístico va a contener el código y se llenaría automáticamente cuando doy clic en el comandbutton de ingresar, es el único que permito que esté vacío.

If txt_apellidos.Text = "" Or txt_nombres.Text = "" Or txt_apto.Text = "" Or txt_calle.Text = "" Or txt_cedula.Value = "" Or txt_celular.Value = "" _
Or txt_celular1.Value = "" Or txt_celular2.Value = "" Or txt_entrecalle.Text = "" Or txt_fechanacimiento.Value = "" Or txt_madre.Text = "" Or txt_mail.Value = "" Or _
txt_mail1.Value = "" Or txt_mail2.Value = "" Or txt_manzana.Text = "" Or txt_nro.Value = "" Or txt_padre.Text = "" Or txt_pareja.Text = "" Or txt_solar.Text = "" Or _
txt_telefono.Value = "" Or txt_tutor.Text = "" Or cbo_ciudades.Text = "" Or cbo_departamento.Text = "" Or cbo_mail1.Text = "" Or cbo_mail2.Text = "" Or cbo_pertenececel1.Text = "" Or _
cbo_pertenececel2.Text = "" Then
MsgBox ("No debes dejar casilleros vacíos, si no se tienen datos completar con Sin Datos, gracias")

Else
‘a continuación quiero que inserte la función por la cual voy a generar el código. Aquí es donde empezaban mis problemas que luego explicaré. Lo que hace es seleccionar la celda A2, si no está vacía que se mueva a la siguiente celda e inserte la función. En la función tuve unos errores antes con la ubicación de las celdas ya que nunca la trabajé así.
Range("A2").Select
'Hasta que no encuentre una columna vacía siga desplazandoce
Do While ActiveCell <> Empty
'Nos desplazamos una fila hacia abajo
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.FormulaR1C1 = "=LEFT(R[0]C[1],2)&RIGHT(R[0]C[1],2)&RIGHT(YEAR(R[0]C[4]),2)&TEXT(ROWS(R[0]C:R2C),""-0000"")"
codigo = ActiveCell.FormulaR1C1

‘Esta primer parte con la que viene a continuación es donde tenía el problema, me insertaba el código en la celda, por ejemplo, A2 y el resto de los datos en la fila siguiente, es decir, B3, C3… pero no en la fila 2 donde está el código.
‘Lo solucione así:

‘luego que insertó la función, quiero que seleccione la celda B2 y, de vuelta, si está llena que se desplace a la siguiente, y llene los datos en las celdas que correspondan. Esto fue lo que terminó solucionando el problema.

Range("B2").Select
'Hasta que no encuentre una columna vacía siga desplazándose
Do While ActiveCell <> Empty
'Nos desplazamos una fila hacia abajo
ActiveCell.Offset(1, 0).Select
Loop
Fila = ActiveCell.Row
Range("B" & Fila) = txt_apellidos
Range("C" & Fila) = txt_nombres
Range("D" & Fila) = txt_cedula
Range("E" & Fila) = txt_fechanacimiento
Range("F" & Fila) = txt_calle
Range("G" & Fila) = txt_nro
Range("H" & Fila) = txt_apto
Range("I" & Fila) = txt_manzana
Range("J" & Fila) = txt_solar
Range("K" & Fila) = txt_entrecalle
Range("L" & Fila) = cbo_ciudades
Range("M" & Fila) = cbo_departamento
Range("N" & Fila) = txt_telefono
Range("O" & Fila) = txt_celular
Range("P" & Fila) = txt_mail
Range("Q" & Fila) = txt_madre
Range("R" & Fila) = txt_padre
Range("S" & Fila) = txt_tutor
Range("T" & Fila) = txt_pareja
Range("U" & Fila) = txt_celular1
Range("V" & Fila) = cbo_pertenececel1
Range("W" & Fila) = txt_mail1
Range("X" & Fila) = cbo_mail1
Range("Y" & Fila) = txt_celular2
Range("Z" & Fila) = cbo_pertenececel2
Range("AA" & Fila) = txt_mail2
Range("AB" & Fila) = cbo_mail2
Range("a1").End(xlDown).Select
End If

‘por ultimo, si la celda A2 está llena, que ingrese el código al combobox cbo_fibroquistico. Por eso no quiero que se chequee al principio si este combobox está vacío ya que se va a llenar luego al final.

Range("a2").Select
Do While ActiveCell <> Empty
cbo_fibroquistico.AddItem ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Loop

End Sub

Por último, gracias a ambos y saludos,
Emiliano
avatar
Emiliano Galasso

Masculino Cantidad de envíos : 40
Edad : 45
Ciudad - Pais : Montevideo-Uruguay
Version de Excel : 2003-2007
Fecha de inscripción : 15/10/2010

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por Logroastur el Mar Nov 30, 2010 5:10 pm

Buenas no llego a entender donde te generaba el fallo puesto que la variable fila=Range("A" & Rows.Count).end(xlup)(2).Row
lo que realiza es localizar en la columna A la 1ª celda libre por lo que asignaria a todas las columnas la misma fila,
lo que realiza la variable es ir a la ultima fila de la columna A esto se lo indica Rows.count es decir cuenta las filas de la hoja y sube hatas el final esto es end(xlup) end = final xulp = subir y baja a la siguiente fila esto es (2) y toma el número de fila esto es Row por lo que seria
fila= sube desde la ultima fila hasta la 1ª fila ocupada y baja una fila y toma el número de fila de esta celda

un saludo

_________________


ForoExcel


avatar
Logroastur
Moderador
Moderador

Masculino Cantidad de envíos : 32
Edad : 52
Ciudad - Pais : España
Version de Excel : 2007
Fecha de inscripción : 20/11/2010

http://www.foroexcel.com/foro/

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por Emiliano Galasso el Mar Nov 30, 2010 5:37 pm

Subo unas capturas de pantallas para ver el problema más fácilmente.
Saludos,
Emiliano




avatar
Emiliano Galasso

Masculino Cantidad de envíos : 40
Edad : 45
Ciudad - Pais : Montevideo-Uruguay
Version de Excel : 2003-2007
Fecha de inscripción : 15/10/2010

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por Emiliano Galasso el Mar Nov 30, 2010 5:42 pm

En la imagen problema1 (le erré en el orden de los nombres, je) se puede ver cuando ingreso los datos (no lleno el combobox código fq ya que se llena luego cuando se genere el código). En la imagen problema aparece cuando clickeo en insertar, donde se puede ver que inserta el código en la columna correspondiente pero inserta el resto de los datos en la fila siguiente.
Saludos,
Emiliano.
avatar
Emiliano Galasso

Masculino Cantidad de envíos : 40
Edad : 45
Ciudad - Pais : Montevideo-Uruguay
Version de Excel : 2003-2007
Fecha de inscripción : 15/10/2010

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por Logroastur el Mar Nov 30, 2010 6:36 pm

Buenas haber si podemos llegar a un entendimiento en tu post 3 donde tenias el archivo en el inicio del codigo estas mandando que te coloque en la primera celda libre de la columna A la formula

Código:
ActiveCell.FormulaR1C1 = "=LEFT(R[0]C[1],2)&RIGHT(R[0]C[1],2)&RIGHT(YEAR(R[0]C[4]),2)&TEXT(ROWS(R[0]C:R2C),""-0000"")"

pero luego cuando trasladas los datos de los controles del formulario le indicas que coloque nuevamente en la primera celda libre de la columna A
el dato del combobox llamado cbo_fibroquistico
Código:
Range("A" & Fila) = cbo_fibroquistico
por lo que logicamente bajara una fila si no es asi lo unico que debes de realizaren el codigo que te facilite es cambiar estas dos lineas

Código:
Fila = Range("A" & Rows.Count).End(xlUp)(2).Row
Range(Range("A" & Fila), Range("AB" & Fila)) = Array(cbo_fibroquistico, txt_apellidos, _

por lo siguiente

Código:
Fila = Range("A" & Rows.Count).End(xlUp.Row
Range(Range("B" & Fila), Range("AB" & Fila)) = Array( txt_apellidos, _

un saludo

_________________


ForoExcel


avatar
Logroastur
Moderador
Moderador

Masculino Cantidad de envíos : 32
Edad : 52
Ciudad - Pais : España
Version de Excel : 2007
Fecha de inscripción : 20/11/2010

http://www.foroexcel.com/foro/

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por Emiliano Galasso el Mar Nov 30, 2010 10:22 pm

La verdad, quedó impecable, mucho más simple. Les agradezco mucho y me voy a poner a estudiar los códigos comparándolos para ir agarrando la mano.
Ufff, es complicado pero está bueno e interesante, habrá que seguir practicando para seguir aprendiendo y sobre todo animarse a equivocarse.
Saludos y muchas gracias desde Uruguay,
Emiliano
avatar
Emiliano Galasso

Masculino Cantidad de envíos : 40
Edad : 45
Ciudad - Pais : Montevideo-Uruguay
Version de Excel : 2003-2007
Fecha de inscripción : 15/10/2010

Volver arriba Ir abajo

Re: problema con una macro que inserta formula

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.