Function per msgbox formattata

di AlbertoL il
10 risposte

Ciao a tutti

ho trovato questa function nel web

ma non so come richiamarla:

Function CustomMsgBox(BoldPrompt As Variant, Prompt As Variant, _
                   Optional Buttons As VbMsgBoxStyle = vbOKOnly, _
                   Optional Title As Variant = "Message") As VbMsgBoxResult

   CustomMsgBox = Eval("MsgBox ('" & Replace(BoldPrompt, "'", "") & "@" & _
                               Replace(Prompt, "'", "") & "@@'," & Buttons & ",'" & _
                               Replace(Title, "'", "") & "')")
End Function

grazie per l'aiuto

10 Risposte

  • Alberto non sei nuovo perchè non posti il codice formattato con i tag CODE?

    Comunque prova a chiamare la funzione come richiami le funzioni normalmente, passa già argomenti obbligatori e se vuoi quelli opzionali

  • 14/10/2024 - oregon ha scritto:


    Alberto non sei nuovo perchè non posti il codice formattato con i tag CODE?

    Comunque prova a chiamare la funzione come richiami le funzioni normalmente, passa già argomenti obbligatori e se vuoi quelli opzionali

    Grazie per la risposta.

    Ok per il msg, ora vorrei aggiungere alla function un temporizzatore, che dopo tot secondi la msgbox si chiude

    Grazie ancora

  • A parte il fatto che questa è un'altra domanda e andrebbe fatta in un altro thread (non siamo in una chat), comunque la strada della MsgBox per fare quello che chiedi è abbastanza tortuosa.

    Ti consiglio di creare un tuo form con tutto quello che ti serve (compreso un timer) per simulare una tua Msgbox 

  • Per fare queste cose, dovresti usare un Form, opportunamente formattata, così puoi gestire quello che vuoi in modo semplice.

    Invece usando gli ACCROCCHI, diventa tutto un problema, e quello è un accrocchio.

    Il Msgbox è una Form Nativa di Windows, di tipo modale, non gestibile, se non provando ad inviare un SendKey con INVIO, e funziona emulando la pressione o il Click sul DefaultButton…, un po come funzionava il ClickYes, tutto questo è decisamente sporco e disfunzionale.

    Se ti fai una bella Maschera la formatti graficamente con un Messaggio, la apri come PopupModale e su Timer di Form la fai chiudere…?

    Serve un piccolo accorgimento per pasarle i Parametri ma non è complesso, ed in ogni caso è completamente gestibile da VBA.

  • 15/10/2024 - @Alex ha scritto:


    Per fare queste cose, dovresti usare un Form, opportunamente formattata, così puoi gestire quello che vuoi in modo semplice.

    Invece usando gli ACCROCCHI, diventa tutto un problema, e quello è un accrocchio.

    Il Msgbox è una Form Nativa di Windows, di tipo modale, non gestibile, se non provando ad inviare un SendKey con INVIO, e funziona emulando la pressione o il Click sul DefaultButton…, un po come funzionava il ClickYes, tutto questo è decisamente sporco e disfunzionale.

    Se ti fai una bella Maschera la formatti graficamente con un Messaggio, la apri come PopupModale e su Timer di Form la fai chiudere…?

    Serve un piccolo accorgimento per pasarle i Parametri ma non è complesso, ed in ogni caso è completamente gestibile da VBA.

    grazie Alex

    hai qualche esempio: Serve un piccolo accorgimento per passarle i Parametri ma non è complesso

  • Le maschere aperte in modalità acDialog si sa non sono più accessibili dall'esterno in quanto esse do Modale sospendendo l'esecuzione del codice chiamante.

    Per questo i parametri si possono passare solo durante l'apertura usando OpenArgs come concatenazione di stringhe usando un carattere di separazione e su load si splitta e si gestiscono gli items dell'array come parametri.

    Alternativa usare Public Variable da valorizzare prima di aprire la Form e su load si vanno a leggere…

    Altra possibilità ma forse troppo tecnica, è creare una classe di Parametri e passarla come Puntatore usando OpenArgs, e su load si recupera la classe oggetto usando il Pointer.

    Questa tecnica decisamente più flessibile e potente, è anche più fuori dallo standard VBA.

    Ti suggerirei la 2° ovvero variabili Public.

  • 15/10/2024 - @Alex ha scritto:


    Le maschere aperte in modalità acDialog si sa non sono più accessibili dall'esterno in quanto esse do Modale sospendendo l'esecuzione del codice chiamante.

    Per questo i parametri si possono passare solo durante l'apertura usando OpenArgs come concatenazione di stringhe usando un carattere di separazione e su load si splitta e si gestiscono gli items dell'array come parametri.

    Alternativa usare Public Variable da valorizzare prima di aprire la Form e su load si vanno a leggere…

    Altra possibilità ma forse troppo tecnica, è creare una classe di Parametri e passarla come Puntatore usando OpenArgs, e su load si recupera la classe oggetto usando il Pointer.

    Questa tecnica decisamente più flessibile e potente, è anche più fuori dallo standard VBA.

    Ti suggerirei la 2° ovvero variabili Public.

    Grazie Alex, le prime due sono alla mia portata,

    ma se mi dai una mano sono tentato di provare la terza.

  • Io eviterei ObjPtr e classi passate per puntatore per adesso… usa metodi semplici…

  • Concordo… suggerisco nuovamente la 2°.

Devi accedere o registrarti per scrivere nel forum
10 risposte