Avatar billede mallesite Nybegynder
26. november 2009 - 09:32 Der er 3 kommentarer

VBA - Excel mail spørgsmål omkring .HTMLBody

Hej alle

Jeg håber I kan hjælpe med et lille problem jeg har med en VBA makro der driller.
Ideen med hele makroen er sådan set at når jeg trykker på en knap i et sheet, så skal der genereres en mail baseret på forskellige ranges i et pågældende sheet.

Det der virker:
- Knappen og tilknytningen til makro
- Generering af mail med 1 range
- Min funktion RangetoHTML

Det der ikke virker:
- Generering af mail med 2 eller flere ranges

Problemet er at når jeg i .HTMLBody appender 2 eller flere ranges, så får jeg kun det første range med i mailen. Jeg har haft det til at virke før, men jeg ved ikke helt, hvorfor det ikke virker i det system jeg sidder i nu.
Derfor er input meget velkomne.

Koden:
------
Sub Mail_Sheet_Outlook_Body()

    ' Ranges
    Dim error_range As Range
    Dim employee_range As Range
   
    Set error_range = Nothing
    Set employee_range = Nothing
       
    Dim OutApp As Object
    Dim OutMail As Object
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    ' Fetch the "Error Messages" - Start
    Set error_range = Sheets("24-11-2009").Range("A1:K2")
    ' Fetch the "Error Messages" - End

    ' Fetch the "Employee Messages" - Start
    Set employee_range = Sheets("24-11-2009").Range("M3:O5")
    ' Fetch the "Employee Messages" - End

    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    Set OutMail = OutApp.CreateItem(0)

    On Error Resume Next
    With OutMail
        .To = Cells(56, "N").Value
        .CC = ""
        .BCC = ""
        .subject = "Mailemne"

        ' HER: går det galt jeg får kun mit error_range med i mailen, men ikke employee_range. Hvis jeg vender dem om i rækkefølge, så får jeg kun employee_range med.
        ' NOTE: RangetoHTML genererer en temp .htm fil og returnerer indholdet af denne (virker som det skal)
        .HTMLBody = RangetoHTML(error_range) + RangetoHTML(employee_range)

        .Display
    End With
    On Error GoTo 0

    With Application
        .EnableEvents = True
        .ScreenUpdating = False
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing

End Sub
------

Input?

Mvh. Mallesite
Avatar billede tjacob Juniormester
26. november 2009 - 16:07 #1
Prøv at ændre plus til &:

.HTMLBody = RangetoHTML(error_range) & RangetoHTML(employee_range)
Avatar billede mallesite Nybegynder
26. november 2009 - 19:28 #2
Hej Jacob

Godt bud ellers - Det virkede desværre stadig ikke.

Jeg har også prøvet:

.HTMLBody = RangetoHTML(error_range)
.HTMLBody = .HTMLBody & RangetoHTML(employee_range)

og også med "+".

Jeg kom til at tænke på om det kunne være noget i Outlook, der satte forhindringen, da jeg netop prøvede samme makro fra et andet Excel-ark, der har virket på en anden PC. Jeg har prøvet at ændre i mine indstillinger i Outlook - herunder "Postformat", hvor jeg har togglet rundt ml. HTML, RTF og rå tekst, men intet virkede :-(.

Andre bud er meget velkomne.

Mvh. Mallesite
Avatar billede tjacob Juniormester
27. november 2009 - 12:51 #3
Kunn det ikke være fordi du lukker med </body></html> i begge meddelelser, så Outlook tror at HTMLBody er slut efter den første meddelelse.

I så fald skal du modificere din RangetoHTML funktion til at kunne tage mere end et range, så du i stedet har noget i denne stil:
.HTMLBody = RangetoHTML(error_range, employee_range)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester