Saltar al contenido

Duda mensaje temporal (unas veces desaparece solo, otras no)


Shaekin

Recommended Posts

publicado

Buenos dias,

Tengo un problema con una macro que estoy haciendo. En ella lo que quiero es tratar datos de una lista de ciudades y que los copie y los pegue en otra hoja. Hasta aqui todo bien.

El problema viene cuando quiero que se muestre un mensaje temporal (MsgBox). El objetivo de este mensaje es pour un lado indicar al usuario la ciudad/municipio que se esta tratando, y también sirve para que el ordenador haga una pausa y actualice los datos de una hoja.

Aqui os subo dos ejemplos:

  • Ciudades : En este caso, la macro es solo para mostrar los mensajes y normalmente desaparecen cada 5 segundos (como indicado en la macro).
  • MacroIntento : Se trata de hacer lo mismo que en "Ciudades" salvo que aqui ya he introducido el resto de la macro que tiene que ejecutarse con cada sitio.

En ambos he introducido el codigo para que aparezca el "popup" :

 CreateObject("wscript.shell").Popup _
"En estos momentos estoy actualizando el sitio de : " & city & ".", 5, "Avance de la macro"[/CODE]

No entiendo por qué, en el fichero "MacroIntento" los mensajes no desaparecen. Estoy obligado a cliquear en "Ok" para que se ejecute.

Puede alguien decirme donde esta el error o como puedo conseguir que desaparezcan los mensajes ?

He intentado la otra opcion, crear un formulario, pero no me sirve para "parar momentaneamente" la macro y que se actualicen los datos de la hoja.

Gracias de antemano !!

Ejemplos.rar

publicado

.

¿ Porqué no usas la barra de estado de Excel y te olvidas de wscript.shell ?

De esta manera conseguirías que el mensaje estuviera el tiempo exacto que dura el tratamiento de cada municipio.

Ejemplo:

Application.StatusBar = "Procesando municipio de " & Municipio[/CODE]

.

publicado

Muchas gracias por tu proposición. Es cierto que funciona correctamente, pero no es exactamente lo que busco.

La idea de mostrar el municipio en tratamiento con un mensaje temporal de unos cuantos segundos es sobre todo para que el ordenador tenga tiempo suficiente para actualizar las celdas de una hoja.

Si no pongo nada y ejecuto la macro directamente (sin pausas) mi ordenador no ejecuta correctamente las acciones (copiar y pegar unos datos que aparecen para cada municipio). Para evitar este problema, si pongo un mensaje en plan Msgbox la acción se realiza correctamente.

El problema es que me gustaría evitar tener que cliquear en el "ok" del Msgbox para cada municipio. Es por ello que se me ocurrió la idea de hacer temporal el mensaje. Pero no consigo que en el programa "MacroIntento" (incluido en el primer fichero que subí) los MsgBox desaparezcan automáticamente. Estoy obligado a cliquear siempre en el famoso ok.

También he intentado el comando "Application.wait" para parar la macro, pero no me sirve de nada porque lógicamente pone todo en pausa y las celdas no se actualizan.

Gracias de antemano por vuestras proposiciones !

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      29

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    2    1

  • Crear macros Excel

  • Mensajes

    • Que tal nuevamente,  adjunto una solución alternativa: =MAX(A:.A)-BYROW(F4:.AK20,LAMBDA(r,BUSCAR(2,1/(r=0),F3:.AK3))) Cabe mencionar que esta solución requiere funciones nuevas como RECORTAR.RANGO. CONTADOR FINAL (Solucion).xlsb
    • Buenos días,  espero se encuentren bien de salud compañeros, Favor me podrían ayuda con lo siguientes como se podría hacer cuando tengo una tabla dinámica que  amedida que se aumente las columnas fechas con data un formula que se coloco al final busque o analice siempre la ultima fila y columna de la fecha. Coloco un ejemplo
    • @JSDJSD Excelentes, GRACIAS POR TU SOPORTE , me ayudo demasiado es exactamente lo que quería. 5 ESTRELLAS
    • 'Opción 1 Sub FiltrarSKUPorFecha(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim diccionarioSKU As Object Dim listaEliminar As Object Dim fechaActual As String, fechaSiguiente As String Dim f As Variant With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Crear diccionarios para comparar SKU y almacenar filas a eliminar Set diccionarioSKU = CreateObject("Scripting.Dictionary") Set listaEliminar = CreateObject("Scripting.Dictionary") ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then diccionarioSKU.RemoveAll ' Limpiar el diccionario antes de llenarlo ' Guardar los SKU de la fecha siguiente (solo de la siguiente) For f = fila + 1 To ultimaFila If .Cells(f, 1).Value <> fechaSiguiente Then Exit For diccionarioSKU(.Cells(f, 2).Value) = 1 Next f ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Solo eliminar si el SKU no está en la fecha siguiente If Not diccionarioSKU.exists(.Cells(f, 2).Value) Then listaEliminar(f) = 1 ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar.keys .Rows(f).Delete Next End With MsgBox "Completado correctamente.", vbInformation End Sub 'Opción 2 Sub FiltrarSKUPorFecha1(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim listaEliminar As Collection Dim fechaActual As String, fechaSiguiente As String Dim f As Variant, i As Long Dim SKUExiste As Boolean With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Inicializar la colección para marcar las filas a eliminar Set listaEliminar = New Collection ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Comprobar si el SKU está en la fecha siguiente SKUExiste = False For i = fila + 1 To ultimaFila If .Cells(i, 1).Value <> fechaSiguiente Then Exit For If .Cells(i, 2).Value = .Cells(f, 2).Value Then SKUExiste = True Exit For End If Next i ' Si el SKU no se encuentra en la fecha siguiente, marcar para eliminar If Not SKUExiste Then listaEliminar.Add f ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar .Rows(f).Delete Next f End With MsgBox "Completado correctamente.", vbInformation End Sub   TABLA ELIMINAR.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.