Avatar billede malldiverne Nybegynder
23. februar 2015 - 10:20 Der er 6 kommentarer og
1 løsning

Send enkelt mail, med flere oplysninger?

Hej Ekspterter,

Jeg sidder med en masse registreringsdata, hvor der er på forhånd er defineret nogle fejlregistreringer. Disse fejlreg. bliver sendt ud via personlig mail, men hvis en person en måned har 15 fejlreg. får denne person 15 mails, vha. nedenstådende kode.


Mit spørgsmål er, kan man ikke lave en kode, der ligger disse data sammmen, så længe det samme person. Der skal dog listes dato, aktivitet og timeantal....

Således en mail kunne se således ud:

Hej "variabel navn"

Du har fejlreg. på følgende aktivtet(er):

en liste med:
DATO  -    Aktivitet  -    Timeantal

Hilsen
Controllerenheden


Jeg har skrevet følgende kode, som virker - men den sender en mail pr. hver enkel fejlreg.

Håber i kan hjælpe!!

PS: Er ikke "ekspert", men nem til lære!!



Do Until ActiveCell = ""

With ActiveSheet
   
    Set navn = ActiveCell.Offset(0, -7)
    Set orgenhed = ActiveCell.Offset(0, -10)
    Set akt = ActiveCell.Offset(0, -5)
    Set aktnavn = ActiveCell.Offset(0, -6)
    Set regt = ActiveCell
    Set link = ActiveCell.Offset(0, 1)
    Set bemærkning = ActiveCell.Offset(0, 2)
    Set mail = ActiveCell.Offset(0, 3)
    Set dag = ActiveCell.Offset(0, -4)
   
End With
       
    Set objOutlook = CreateObject("Outlook.Application")
    Set objMail = objOutlook.CreateItem(0)
 
   
      With objMail
        .To = mail
        .Subject = "Fejlregistering på aktivitetsniveau"
        .CC = ""
       
        .body = "Hej" & " " & navn & vbNewLine & vbNewLine & "Vi har fundet nedenstående fejlregisterering der er generet efter et kriterie opsat efter din afdeling." _
        & vbNewLine & vbNewLine & "Du har registeret dig på følgende" & " " & aktnavn & " " & akt & " med afdeling" & " " & orgenhed & ", dette er sket d. " & dag & ", hvor der er registeret " & regt & " timer." & _
vbNewLine & bemærkning & _
        vbNewLine & vbNewLine & "Med venlig hilsen" & vbNewLine & "Controllerenheden"
Avatar billede supertekst Ekspert
23. februar 2015 - 14:48 #1
Sub afsendAfBesked()
Dim modtager As String, linje As String

    modtager = Range("D1")
    linje = "Dato" & vbTab & vbTab & "Aktivitet" & vbTab & vbTab & "Timer" & vbCr
   
    For ræk = 1 To ActiveCell.SpecialCells(xlLastCell).Row
        Range("K" & ræk).Activate
        If ActiveCell.Offset(0, -7) <> modtager Then
            sendMail mail, navn, linje
            modtager = Range("F" & ræk)
            linje = "Dato" & vbTab & vbTab & "Aktivitet" & vbTab & vbTab & "Timer" & vbNewLine
        End If
       
        With ActiveSheet
            Set navn = ActiveCell.Offset(0, -7)
            Set orgenhed = ActiveCell.Offset(0, -10)
            Set akt = ActiveCell.Offset(0, -5)
            Set aktnavn = ActiveCell.Offset(0, -6)
            Set regt = ActiveCell
            Set link = ActiveCell.Offset(0, 1)
            Set bemærkning = ActiveCell.Offset(0, 2)
            Set mail = ActiveCell.Offset(0, 3)
            Set dag = ActiveCell.Offset(0, -4)
           
            linje = linje & dag & vbTab & vbTab & aktnavn & vbTab & vbTab & regt & vbNewLine
        End With

    Next ræk
   
Rem sidste modtager
    sendMail mail, navn, linje
End Sub
Private Sub sendMail(mail, navn, linje)
      Set objOutlook = CreateObject("Outlook.Application")
      Set objmail = objOutlook.CreateItem(0)
     
      With objmail
          .To = mail
          .Subject = "Fejlregistering på aktivitetsniveau"
          .CC = ""
         
          .body = "Hej" & " " & navn & vbNewLine & vbNewLine & "Vi har fundet nedenstående fejlregisterering der er generet efter et kriterie opsat efter din afdeling." _
          & vbNewLine & vbNewLine & "Du har registeret dig på følgende:" & vbNewLine & linje & vbNewLine & "Med venlig hilsen" & vbNewLine & "Controllerenheden"
      End With
     
      objmail.send
End Sub
Avatar billede malldiverne Nybegynder
24. februar 2015 - 14:37 #2
Mange tak for det hurtige svar.

Jeg har nu nedenståeden kode, layoutet og outputtet passer perfekt.

Men der bliver oprettet en mail, pr. hver fejl reg., hvor den gerne skulle lave en liste med alle fejl reg. pr. person. således at hvis en person har 5 fejl reg. bliver de listet i kun 1 mail i stedet for 5 mails.

Datasættet er sorteret efter navn, således at en persons fejl registreringerne kommer lige efter hinaden.

Håber du kan hjælpe :)


Private Sub afsendAfBesked()
   
Worksheets("Mail").Activate
 
Dim modtager As String, linje As String
       

modtager = Range("g2") ' = Personens navn
linje = "Dato" & vbTab & vbTab & "Aktivitet" & vbTab & vbTab & "Timer" & vbCr

For ræk = 1 To ActiveCell.SpecialCells(xlLastCell).Row
    Range("N" & ræk).Activate ' N kolonnen = fejlreg. timer
    If ActiveCell.Offset(0, -7) <> modtager Then
        SendMail mail, navn, linje
        modtager = Range("N" & ræk) ' N kolonnen = fejlreg. timer
        linje = "Dato" & vbTab & vbTab & "Aktivitet" & vbTab & vbTab & vbTab & vbTab & "Timer" & vbNewLine
End If

With ActiveSheet
    Set navn = ActiveCell.Offset(0, -7)
    Set orgenhed = ActiveCell.Offset(0, -10)
    Set akt = ActiveCell.Offset(0, -5)
    Set aktnavn = ActiveCell.Offset(0, -6)
    Set regt = ActiveCell
    Set link = ActiveCell.Offset(0, 1)
    Set bemærkning = ActiveCell.Offset(0, 2)
    Set mail = ActiveCell.Offset(0, 3)
    Set dag = ActiveCell.Offset(0, -4)
   
    linje = linje & dag & vbTab & vbTab & aktnavn & " " & akt & vbTab & vbTab & regt & vbNewLine
End With

Next ræk
Rem sidste modtager
  SendMail mail, navn, linje
End Sub

Private Sub SendMail(mail, navn, linje)

  Set objOutlook = CreateObject("Outlook.Application")
  Set objMail = objOutlook.CreateItem(0)
 
   
      With objMail
        .To = mail
        .Subject = "Fejlregistering på aktivitetsniveau"
        .CC = ""
        .body = "Hej" & " " & navn & vbNewLine & vbNewLine & "Vi har fundet nedenstående fejlregisterering der er generet efter et kriterie opsat efter din afdeling." _
        & vbNewLine & vbNewLine & "Du har registeret dig på følgende:" & vbNewLine & vbNewLine & linje & vbNewLine & vbNewLine
           
        objMail.display 'Instead of .Display, you can use .Send to send the email or .Save to save a copy in  the drafts folder
       
      End With

End Sub
Avatar billede supertekst Ekspert
24. februar 2015 - 14:51 #3
Selv tak
De forudsætninger, du nævner, er også tilgodeset i min model, som jeg også har kørt test på, hvilket fungerede.

Prøv at steppe gennem din kode med F8 - så kan du følge forløbet.
Indret vinduerne så du både kan se VBA-vinduet og data.
Avatar billede malldiverne Nybegynder
24. februar 2015 - 19:53 #4
Så fik jeg den til virke, mange tak skal du have - det var celledestinationen, der var problemet.

Selve layoutet i mailen opfører sig mærkeligt, selvom der bliver anvendt vbTab.

Det går galt når -aktnavn- bliver over ca 15 karakter, så rykker hele layoutet sig. Er det noget du har en løsning på?

Mvh

Martin
Avatar billede supertekst Ekspert
25. februar 2015 - 11:31 #5
Evt. kunne -aktnavn- bliver placeret sidst i linen.
Avatar billede malldiverne Nybegynder
25. februar 2015 - 20:11 #6
Det blev også løsningen på det, mange tak for din hjælp :)


Jeg oprettet et spørgsmål mere, med nye point - hvis du måske har tid.
http://www.eksperten.dk/spm/1002023


Mvh

Martin
Avatar billede supertekst Ekspert
25. februar 2015 - 23:17 #7
Selv tak - jeg ser på dit nye spørgsmål..
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

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