Utilizzare la stessa macro da più maschere

di il
8 risposte

Utilizzare la stessa macro da più maschere

Buonasera,

chiedo un aiuto su un codice VBA per access che non riesco a sviluppare.

Dovrei mandare una mail da più maschere ed il contenuto della mail: mittente, destinatario, oggetto, testo della mail,  lo vado a recuperare in una maschera specifica.

Poi un'altra cosa, una macro lanciata dal click di un pulsante, la posso richiamare da un pulsante presente in un'altra maschera?

Se non sono stato chiaro nella spiegazione ci riprovo…

Attendo un vostro suggerimento

Grazie in anticipo…

8 Risposte

  • Re: Utilizzare la stessa macro da più maschere

    28/09/2023 - Giampy72 ha scritto:


    Dovrei mandare una mail da più maschere ed il contenuto della mail: mittente, destinatario, oggetto, testo della mail,  lo vado a recuperare in una maschera specifica.

    Ecco, di questa parte hai abbozzato qualcosa, seppur con errori? Sentito parlare di DoCmd.SendObject? (ma non è l'unica via)

    una macro lanciata dal click di un pulsante, la posso richiamare da un pulsante presente in un'altra maschera?

    Eri partito anche bene, quando hai scritto “codice VBA”, poi sei caduto nella trappola macro. Non usarle, VBA fa tutto molto meglio. Per rispondere  nello specifico: si crea una funzione in un modulo standard (che di default è Public ma è meglio esplicitarlo) che è utilizzabile ovunque.

  • Re: Utilizzare la stessa macro da più maschere

    28/09/2023 - Giampy72 ha scritto:


    una macro lanciata dal click di un pulsante, la posso richiamare da un pulsante presente in un'altra maschera?

    Sì.

  • Re: Utilizzare la stessa macro da più maschere

    28/09/2023 - Giampy72 ha scritto:


    Buonasera,

    chiedo un aiuto su un codice VBA per access che non riesco a sviluppare.

    Spiega cosa deve fare questo codice VBA che dici… e cosa hai provato a fare.

    Dovrei mandare una mail da più maschere ed il contenuto della mail: mittente, destinatario, oggetto, testo della mail,  lo vado a recuperare in una maschera specifica.

    Poi un'altra cosa, una macro lanciata dal click di un pulsante, la posso richiamare da un pulsante presente in un'altra maschera?

    La risposta “banale” che ti si può dare è “SI” senza capire però il contesto o senza darti dettagli di cosa significa il “SI”…

    Normalmente le macro, sono una zavorra inutile che usa chi non conosce il VBA, ma si portano dietro delle limitazioni molto pesanti.

    Ad esempio quando inserisci i rifertimenti su Controlli da cui prendere i dati, come nel tuo caso es. Destinatari Mail/Oggetto/Corpo, imponi una origine fissa vincolata dalla Maschera specifica… Maschere!Maschera1!Destinatari…. ma se apri Maschera2 nonostante il Controllo Destinarari ci sia lo cerca sempre in Maschera1.

    Quindi in questo caso la risposta intelligente sarebbe dovuta essere essere “NO”, oppure dovremmo spiegarti come rendere i riferimenti agli Oggetti dinamici affinchè possano essere recuperati da qualsiasi maschera.

    Siccome queste cose sono estremamente più semplici da gestire con il codice ti suggerisco di affrontare la cosa da codice.

    Se devi mandare una mail, in linea di principio si tratta di 1 RIGA e non serve una Macro o una Funzione speciale da richiamare da N Maschere… basta scrivere la riga con il SendObject… (se non devi mandare Allegati e la mail è solo in formato testo).

    Quì trovi la spiegazione di come funziona:

    https://learn.microsoft.com/en-us/office/vba/api/access.docmd.sendobject

    Se la mail contiene allegati, diversi dal Report di stampa, allora le cose si complicano… e va studiato il metodo giusto.

    Se non sono stato chiaro nella spiegazione ci riprovo…

    Attendo un vostro suggerimento

    Grazie in anticipo…

    Devi ragionare in relazione a cosa veramente ti serve… 

  • Re: Utilizzare la stessa macro da più maschere

    Buongiorno a tutti,

    per mandare la mail volevo usare (imparare ad usare) il codice che trovate sotto.

    Sto facendo un file Access per registrare eventuali visita che avvengono iin azienda.

    Funziona in modo molto sempice: Il visitatore arriva in azienda, si registra indicando nome, cognome, il referente per la sua visita, riceve un numero che funge da codice ed effettua la registrazione. Effettua l'incontro e quando la sua visita è conclusa, si dichiara con il numero ricevuto in entrata ed esce.

    Nelle fasi di ingresso ed uscita, volevo mandare in entrata una mail al referente ed alla reception avvisando che è arrivato il Sig tal dei tali…., e in uscita, una mail alla reception avvisando che tal dei tali è uscito all'ora x.

    Per mandare la mail in uscita del visitatore, queste due righe sotto mi vanno in errore e non riesco a recuperare alcune informazioni per completare la mail da spedire.

    es: il nome della persona presente in reception, che si trova nella tabella UltimoInUscita, Il nome del visitatore che si trova sempre in UltimoInUscita, il cognome, la mil del referente e le mail 

    strMsg = strMsg & "<p>" & "Spett. " & [Forms]![UltimoInUscita]![Reception] & ","
    strMsg = strMsg & "<br /><br />" & "ti comunico che " & [Forms]![UltimoInUscita]![Nome] & " " & [Forms]![UltimoInUscita]![Cognoome] & " " & " è uscito alle ore " & [Forms]![UltimoInUscita]![OraUscita] & ". </p>"

    Per l'ingresso del visitatore, come mail, non ho ancora fatto niente perchè mi sono bloccato con l'uscita….

    Quello che volevo capire è come scrivere correttamente nel codice vba il riferimento ai campi di access.

    Potete aiutarmi?

    Grazie.

    Public Sub Mail()
    
    Dim OutApp As Object                            ' Late binding
    Dim OutMail As Object                           ' Late binding
    Dim strMsg As String                            ' Contiene il testo del messaggio
    Dim strDest As String                           ' Contiene l'indirizzo email
    
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)              'Creo mail vuota
    
    strMsg = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>"
    strMsg = strMsg & "<html xmlns='http://www.w3.org/1999/xhtml'>"
    strMsg = strMsg & "<body>"
    strMsg = strMsg & "<p>" & "Spett. " & [Forms]![UltimoInUscita]![Reception] & ","
    strMsg = strMsg & "<br /><br />" & "ti comunico che " & [Forms]![UltimoInUscita]![Nome] & " " & [Forms]![UltimoInUscita]![Cognoome] & " " & " è uscito alle ore " & OraUscita & ". </p>"
    strMsg = strMsg & "</body>"
    strMsg = strMsg & "</html>"
    
    strDest = "Mittente"
    
    With OutMail
        .to = strDest
        .cc = ""
        .BCC = ""
        .Subject = "Uscita Visitatore"
        
        .HTMLBody = strMsg
        .Display
    End With
    
    Set OutMail = Nothing
    Set OutApp = Nothing
        
    
    
    End Sub
  • Re: Utilizzare la stessa macro da più maschere

    queste due righe sotto mi vanno in errore

    Quale errore ti restituisce?

  • Re: Utilizzare la stessa macro da più maschere

    Buongiorno,

    mi da questo errore.

    Immagino che anche la seconda riga mi darà lo stesso errore.

  • Re: Utilizzare la stessa macro da più maschere

    Quando si vuole rendere il codice riutilizzabile non si deve introdurre nello stesso un sistema di RIFERIMENTI VINCOLATI e statici, nel tuo caso fai riferimento alla Maschera, come ti ho scritto sopra…!!

    Devi creare una Funzione Public dichiarata in un Modulo Standard alla quale passare i parametri…!

    Nel tuo caso poi non la mandavi la mail ma la aprivi solo, quindi immagino si siano create Nmila istanze non chiuse e nessuma mail inviata.

    Quindi usare il metodo SEND non Display e metti il Mittente che va nella proprietà FROM ed il Destinatario va nella proprietà TO, un facsimile sotto:

    Public Function Mail(pDest As String, _
    					 pMsg As String, _
    					 pReception as String, _
    					 pNomeCognome as string, _
    					 pOraUscita As String)	As Boolean
    
    	Dim OutApp As Object                            ' Late binding
    	Dim OutMail As Object                           ' Late binding
    	Dim strMsg As String                            ' Contiene il testo del messaggio
    
    	Set OutApp = CreateObject("Outlook.Application")
    	Set OutMail = OutApp.CreateItem(0)              'Creo mail vuota
    
    	strMsg = "<!DOCTYPE html><html>"
    	strMsg = strMsg & "<body>"
    	strMsg = strMsg & "<p>" & "Spett. " & pReception & ","
    	strMsg = strMsg & "ti comunico che " & pNomeCognome & " è uscito alle ore " & OraUscita & "."
    	strMsg = strMsg & "</p>"
    	strMsg = strMsg & "</body>"
    	strMsg = strMsg & "</html>"
    
    	With OutMail
    		.From ="Manca il MITTENTE"
    		.to = pDest
    		.cc = ""
    		.BCC = ""
    		.Subject = "Uscita Visitatore"
    		
    		.HTMLBody = strMsg
    		.Send
    	End With
    
    	Set OutMail = Nothing
    	Set OutApp = Nothing
    
    End Function

    Questa la richiami da dove vuoi semplicemente passando alla chiamata la valorizzazione dei Parametri… servirebbe gestione errori e condizione dell'invio avvenuto… ma è un dettaglio.

  • Re: Utilizzare la stessa macro da più maschere

    Grazie Alex.

    Vedo di studiarmi tutti i passaggi che mi hai dato e poi cercherò di applicarla.

    Il metodo Dispaly l'ho usato solo per eviatre di mandare mail. Per il momento mi basta vedere il risultato a video.

    Grazie per il supporto e per i suggerimenti.

Devi accedere o registrarti per scrivere nel forum
8 risposte