Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [VBA] Da excel, andare a capo con outlook

    Mi spiego meglio.
    Tramite excel sto cercando di creare una funzione che mi prelevi dalle celle di una determinata riga i dati e che li spedisca tramite mail.
    Per rendera più leggibile vorrei andare a capo. Purtroppo non mi riesce. Qualcuno mi può aiutare?


    Sub mandamail()
    Destinatario = Cells(ActiveCell.Row, 10)
    Corpo = "ciao %0A ciccio"
    Oggetto = "test"
    test = CreaVisualizzaMail(Destinatario, Oggetto, Corpo)

    End Sub

    Function CreaVisualizzaMail(Destinatario, Oggetto, Corpo)
    Dim oMail As Outlook.MailItem, oApp As Outlook.Application
    Set oApp = New Outlook.Application
    Set oMail = oApp.CreateItem(olMailItem)
    oMail.To = Destinatario
    oMail.Body = Corpo
    oMail.Subject = Oggetto
    oMail.Display
    Set oMail = Nothing
    Set oApp = Nothing
    End Function

    nei riferimenti ho aggiunto microsoft outlook 11

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Prova usando la stringa
    %0d%0a
    come ritorno a capo, esempio


    codice:
    Const sCR = "%0d%0a"
    Corpo = "Ciao," & sCR & _
            "sono Ciccio" & sCR & _
            "Ti scrivo per augurarti" & sCR & sCR & _
            "BUONE FESTE!"

  3. #3
    ciao
    grazie ma avevo già provato .. infatti il risultato è questo :

    Ciao,%0d%0asono Ciccio%0d%0aTi scrivo per augurarti%0d%0a%0d%0aBUONE FESTE!

    anche su altri forum mi davano questo suggerimento, però non capisco cosa sbaglio. Eppure ho fatto un copia/incolla di quello che mi hai scritto. Può darsi che dipenda da qualche riferimento?

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Secondo me è sbagliato usare il riferimento ad Outlook 11 a prescindere che sia installato o meno.

    Se l'utente non ha Outlook, o lo ha di una versione diversa, oppure in futuro cambia versione, oppure usa un'altro mailer, si attacca al tram, riceve una bella pernacchia di errore irreversibile, mandando in tilt il codice.

    E' sempre preferibile usare il protocollo MAILTO che è indipendente dal mailer, cioè funziona qualsiasi mailer sia installato sul computer.
    Probabilmente è questo il motivo per cui tutti ti hanno sempre indicato la sequenza "%0d%0a, perchè è quella del protocollo MAILTO.

    Nel tuo caso, probabilmente (ma non ne sono certo) forse basta la normale costante di VBA che è vbCrLf o vbCR , prova.

    Resta comunque valido il discorso sopra, usare il protocollo MAILTO evita qualsiasi grana.
    Esempio:
    http://www.vb-helper.com/howto_launch_email.html


  5. #5
    come non darti ragione....
    provo subito con il mailto!

    se ho problemi continuerò a stressarvi

  6. #6
    scusate se vi stresso continuamente, però ho riscontrato l'ennesimo problema che ho avuto con la formula nuda e cruda di mail to su excel.

    Difatti, quando mi apre la nuova mail già precompilata, non mi compare mai la firma. Eppure è strano perchè quando clicco su un link mailto di qualunque sito, o creo una nuova mail su outlook la firma compare tranquillamente.

    So che potrei integrare il testo direttamente nella routine, però vorrei evitare di andare a modificarla ogni volta che cambio la firma

  7. #7

  8. #8
    allora non so se ho sbagliato qualcosa io...
    seguendo l'esempio che mi hai passato ho copiato/incollato questo codice

    Public Sub SendMail()
    Dim mail_to As String
    Dim strParameters As String
    Dim strCommand As String
    mail_body = "Ciao " & Cells(ActiveCell.Row, 8) & "!"

    mail_subject = "Soggetto: test"
    mail_to = Cells(ActiveCell.Row, 10)
    ' Compose the parameters.
    If Len(mail_cc) Then
    strParameters = strParameters & "&CC=" & ReplaceSpecialCharacters(mail_cc)
    End If

    If Len(mail_bcc) Then
    strParameters = strParameters & "&BCC=" & ReplaceSpecialCharacters(mail_bcc)
    End If

    If Len(mail_subject) Then
    strParameters = strParameters & "&Subject=" & ReplaceSpecialCharacters(mail_subject)
    End If

    If Len(mail_body) Then
    strParameters = strParameters & "&Body=" & ReplaceSpecialCharacters(mail_body)
    End If

    ' If the parameters aren't blank,
    ' replace the initial & with ?.
    If Len(strParameters) Then Mid(strParameters, 1, 1) = _
    "?"

    ' Add the basic mailto command.
    strCommand = "mailto:" & mail_to & strParameters

    ' Send this to ShellExecute.
    ShellExecute hwnd, "open", strCommand, _
    vbNullString, vbNullString, SW_SHOWNORMAL
    End Sub

    ' Replace special characters with their hex codes.
    Private Function ReplaceSpecialCharacters(ByVal txt As String) As String
    Dim i As Integer
    Dim ch As String
    Dim result As String

    For i = 1 To Len(txt)
    ch = Mid$(txt, i, 1)
    If (ch < " ") Or (ch > "~") Or (ch = "&") Then
    ' Replace with hex code.
    ch = Right$("00" & Hex(Asc(ch)), 2)
    result = result & "%" & ch
    Else
    ' Leave unchanged.
    result = result & ch
    End If
    Next i

    ReplaceSpecialCharacters = result
    End Function

    l'unica modifica che ho fatto è che qui
    ShellExecute hwnd, "open", strCommand, _
    invece di Me.Hwnd ho messo Hwnd (perchè mi dava un errore) e ho creato un modulo con le seguenti dichiarazioni

    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

  9. #9
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Anche se ho dovuto aggiungere la dichiarazione di alcune variabili che mancano nella routine (probabilmente tu le hai messe a livello di modulo)...

    ...a me il TUO codice funziona!

    Però io NON uso Outlook, quindi non saprei dirti da cosa dipende.

    La sola cosa che mi viene in mente è che nelle celle di Excel usate possa esservi qualche carattere strano. Hai provato la routine usando direttamente dei valori anzichè i riferimenti alle celle? Cioè:

    codice:
        'mail_to = Cells(ActiveCell.Row, 10)
        mail_to = "vbcorner@vbcorner.net"
    Provare non costa niente.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.