Macro para cerrar formulario o userform

--------

------

Hola

Tengo este codigo que muestra un listbox en un userform

Sub alert()

Dim fech As Date

fech = Sheets("Movimientos").Range("L1").Value

Set hs = Sheets("Movimientos")

items = Hoja20.Range("A" & Rows.Count).End(xlUp).Row

j = 8

f = 1

 For i = 2 To items

             If Hoja20.Cells(i, j) = fech Then

                Me.ListBox1.AddItem Hoja20.Cells(i, 1)

                Me.ListBox1.list(Me.ListBox1.ListCount - 1, 1) = f

                Me.ListBox1.list(Me.ListBox1.ListCount - 1, 2) = Hoja20.Cells(i, 3)

                Me.ListBox1.list(Me.ListBox1.ListCount - 1, 3) = Hoja20.Cells(i, 4)

                Me.ListBox1.list(Me.ListBox1.ListCount - 1, 4) = Hoja20.Cells(i, 5)

                Me.ListBox1.list(Me.ListBox1.ListCount - 1, 5) = Hoja20.Cells(i, 6)

                Me.ListBox1.list(Me.ListBox1.ListCount - 1, 6) = Hoja20.Cells(i, 7)

                Me.ListBox1.list(Me.ListBox1.ListCount - 1, 7) = Hoja20.Cells(i, 8)

                Me.ListBox1.list(Me.ListBox1.ListCount - 1, 8) = Hoja20.Cells(i, 9)

                Me.ListBox1.list(Me.ListBox1.ListCount - 1, 9) = Hoja20.Cells(i, 10)

                f = f + 1

              End If

 Next

End Sub

Private Sub UserForm_Initialize()

    Call OcultarRibbon

    Call OcultarBformulas

    Call OcultarBarraEstado

    Call QuitabotonX(Me.Caption)

    ListBox1.ColumnCount = 10

    'Asigno el ancho a cada columna

    Me.ListBox1.ColumnWidths = "250 pt;25 pt;35 pt;35 pt;35 pt;25 pt;25 pt;55 pt;65 pt;120 pt"

Call alert

End Sub

Private Sub CommandButton2_Click()

Unload Me

Load frm_Menu

frm_Menu.Show

End Sub

Lo anterior me busca registros con la misma fecha de vencimiento

Todo bien al mostrarme los datos

Pero al cerrar el formulario este no se cierra, tengo el boton para cerrar (commandbutton2) hasta que le doy las veces que aparecen los registros en el listbox se cierra

Explico

Si 6 registros me aparecen en el listobox, tengo que darle 6 veces al boton cerrar para que se cierre

No doy con la solucion

Espero me ayuden

Gracias

----

---

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

1 Respuesta

Respuesta
2

En tu "CommandButton2" si bien descargas/cierras un "UserForm" activo, a su vez cargas/activas el "UserForm" llamado "frm_Menu" ¿no será qué vuelves a cargar el que has cerrado entrando al ciclo que mencionas?

Comenta

Abraham Valencia

pues no, ya revise eso y siempre me da el problema, no se ha que se deb

Pues no, revise eso, también cambie desde donde debe aparecer el userform y siempre da lo mismo

Si puedes "sube" a algún "drive" para que compartas el archivo y podamos ver que es lo que ocurre.

Abraham Valencia

espero funcione en tu compu

Lo he abierto en mi portátil y, como tú sospechabas, no se puede ver todo dado que tu llamado a funciones de la API es para 32 bits y yo ahí tengo Office de 64 bits. No sería de mucho trabajo cambiar eso pero también me sale el mensaje de "objetos faltantes" y he verificado que has usado algunos objetos ActiveX no compatibles con las versiones de 64 bits, pero como casi todo tiene solución en esta vida, apenas prenda mi PC, en donde tengo Office de 32 bits, podré ver tu archivo con tranquilidad pero, en camino a eso, al tener varios "UserForm" tu archivo y para no estar intentando uno por uno, no olvides decirme cual de todos es el del problema.

Salu2

Abraham Valencia

Probé en el "Userform" llamado "frm_Alerta" y no tuve problema al cerrar con el botón correspondiente. Una sola vez y listo, cerró y abrió el "frm_Menu". Ya lo probé varias veces sin problema. ¿El problema ocurrió en la PC en donde trabajas el archivo o en la de algún compañero/amigo? si es en tu PC ¿algún cambio previo en dicha PC antes de dicho error?

Abraham Valencia

en la misma copu donde he programado toda la macro es donde lo uso

no entiendo porque el problema

he intentado llamar el userform (frm_Alerta) desde otro lado y siempre me da el mismo problema

Según yo fui al "grano" del asunto y "aisle" solo ese "UserForm", pero dado tu último comentario lo cargué tal cual está en tu archivo y vi el famoso problema, busqué/miré que ocurría y me di cuenta que cargas dicho "userForm" tanta veces como, supuestamente, cargas registros en el ListBox.

En tu "UserForm" llamado "frm_Inicio", en el evento "Exit" de "TextBox1", descargar dicho "UserForm" y llamas a un procedimiento de nombre "alerta":

 Unload Me
    'Load frm_Clientes
    'frm_Clientes.Show
    Call alerta
    

Luego, ese procedimiento, que está en el mismo módulo del UserForm" llamado "frm_Inicio", creas un bucle con "For-Next" que "carga" el " "UserForm" llamado "frm_Alerta" tantas veces como se cumple una condición.

 For i = 2 To items
    If Hoja20.Cells(i, j) = fech Then
    Unload Me
    Load frm_Alerta
    frm_Alerta.Show
    Else
    Load frm_Menu
    frm_Menu.Show
    End If
    Next

Asumo que ese procedimiento "alerta" era de tu intentos/prácticas iniciales para ver/sabe como cargar el "ListBox" ya que, en el "UserForm" llamado "frm_Alerta" tienes otro procedimiento del mismo nombre pero que sí llena el "ListBox".

Borra el "alerta" del "UserForm" llamado "frm_Inicio" y listo. Ah, al borrarlo no olvides que, de algún modo, tienes que cargar tu "frm_Alerta", quizá en tu evento "Exit" del "TextBox1" en lugar de "Call Alerta" sea mejor un "frm_Alerta.Show".

Abraham Valencia

Abraham Valencia

siempre me da el mismo problema

Creo que no eliminaste el "For" del que te hablé:

https://1drv.ms/x/s!ApkTgtnWCTgAizvpI6xAqLWQaA4G 

Mira ahora, cuando desde "frm_inicio" cargas "frm_alerta", no ocurre el problema. Es el (innecesario) "For" el del problema. Ah, ojo, repito, el "for" de la rutina "alerta" del módulo del "frm_inicio", la rutina "alerta" del módulo "frm_alerta" sí cumple su función.

Una última cosa, en el archivo que te (re)envío he colocado muchas cosas como "comentario", creo que es mejor no trabajes sobre dicho archivo sino que solo lo veas y tomes de modelo para corregir tu problema.

Abraham Valencia

no se puede bajar el archivo porque supera el tamaño de 5 megas

subilo a google drive porfa

el archivo que subiste es el mismo sin ninguna correccion

porque sigue dando el mismo problema

El for de esta rutina, el que esta en negrita

Dim fech As Date
fech = Sheets("Movimientos").Range("L1").Value
Set hs = Sheets("Movimientos")
items = Hoja20.Range("A" & Rows.Count).End(xlUp).Row
j = 8
f = 1
For i = 2 To items
If Hoja20.Cells(i, j) = fech Then
Load frm_Alerta
frm_Alerta.Show
Else
Load frm_Menu
frm_Menu.Show
End If
Next

este for busca en la columna 8 de la hoja Movimientos todas fechas para compararlas con

fech = Sheets("Movimientos").Range("L1").Value, si encuentra alguna fecha entonces el userfomr frm_Alerta debe mostrar los datos de esas fechas en el listbox.

Sino hay ninguna fecha igual entonces debe saltar esa parte y mostrar el frm_Menu.

Si quito ese for entonces como buscara las fechas para compararlas.

Corregime esta parte y colocala aquí por favor porque no tengo idea de que hacer.

Gracias

Otra vez el enlace, por si acaso:

https://drive.google.com/file/d/1XSASbZH6Qe3vhKvGIGf0QE5oR6X_ONvR/view?usp=sharing 

Y  por si  aún hay dudas, aquí un video:

https://drive.google.com/file/d/1Z-v-apzx8_22ryjAqROQGVF-n5giI7v0/view?usp=sharing 

Lo otro es que tengas otros "Userform" con ese problema y yo haya estado ayudándote solo con uno y/o con otro pero en los anteriores mensajes te estuve mencionado los nombres.

Ah, otra cosa, si ves yo ingreso al "frm_alerta" de un modo, quizá tú de otro en donde también puede haber un bucle innecesario pero, no sabría decírtelo ya que no encontré otros nombres "alerta" en el proyecto, quizá, de ser eso, tiene otro nombre.

Abraham Valencia

Aja, entendí porque tu "For" y, claro, ya con eso entendí cual era tu problema, al menos en ese punto. Tu rutina "Alerta" del "frm_Inicio" déjala así:

Sub alerta()
 Dim fech As Date
    fech = Sheets("Movimientos").Range("L1").Value
    Set hs = Sheets("Movimientos")
    items = Hoja20.Range("A" & Rows.Count).End(xlUp).Row
    j = 8
    f = 1
    For i = 2 To items
    If Hoja20.Cells(i, j) = fech Then
    Unload Me
    Load frm_Alerta
    frm_Alerta.Show
    Exit Sub
    End If
    Next
Load frm_Menu
frm_Menu.Show
End Sub

De ese modo si la fecha coincide con una de las celdas, se carga el "frm_Alerta" una sola vez evitando el molesto problema anterior y sino hay coincidencia, se carga el "frm_menu".

Igual me queda una dura con el evento "Exit" de tu "TextBox" ya que tienes esta parte:

Load frm_Clientes
    frm_Clientes.Show
   Call alerta
    Load frm_Menu
    frm_Menu.Show

Cargas un "frm_clientes", "corres" la rutina "Alerta" que carga o "frm_alerta" o "frm_Menu", entonces de darse el segundo caso, estarías cargando el " "frm_Menu" al menos dos veces. Pero bueno, es solo una observación, creo que por ahora concentrémonos con el primer problema, prueba tal cual ahora.

Abraham Valencia

PD: Suerte que es sábado jejejej

¡Gracias!

Ya me funciona, te agradezco el tiempo

Y suerte que sábado

Saludos

Feliz año 2018

Feliz año :)

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas