Avatar billede pharlap Nybegynder
20. august 2005 - 11:04 Der er 24 kommentarer og
1 løsning

vedr e-mail funktion

Hejsa.

Jeg har oprettet en email macro som egenligt virker fint nok.
I mit excel ark har jeg nogle felter som bestemmer hvordan subject linien i mailen skal se ud.

Jeg kan dog kun få den ene af disse til at virke..
Når jeg tilføjer noget i de andre så bliver subject linien blank.

Jeg har rippet koden ud som skulle styre denne funktion, kan nogen se hvad jeg gør forkert her?

Jeg er newbee til dette så bær over med mig...


Dim strMobilsvarnrOnly As String
Dim strDatanrOnly As String
Dim strFaxnrOnly As String
Dim strResult1 As String
Dim strResult2 As String
Dim strResult3 As String


'*************
strMobilsvarnrOnly = Range("D51")
strDatanrOnly = Range("E51")
strFaxnrOnly = Range("H51")
'*************
strResult1 = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af " & Range("E49").Text & " ( " & Range("d26").Text & " ) "
strResult2 = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af " & Range("h49").Text & " ( " & Range("d26").Text & " ) "
strResult3 = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af " & Range("d49").Text & " ( " & Range("d26").Text & " ) "
'*************
If strDatanrOnly = "" Then
If strFaxnrOnly = "" Then
If strMobilsvarnrOnly = "" Then
'Alle felter blanke
   
    svar = MsgBox("Du skal udfylde enten et Mobilsvarnummer," & vbCrLf _
            & "datanummer eller et faxnummer" & vbCrLf _
            & "Før du kan sende skema til MESEF", vbOKOnly)
            If svar = vbOK Then
            Exit Sub
    End If
    End If
    End If
   
Else
'Datanummer er udfyldt og fax og mobilsvar er blanke
    If strFaxnrOnly = "" Then
    If strMobilsvarnrOnly = "" Then
        strSubject = strResult1
'Faxnummer er udfyldt og data og mobilsvar er blanke
    ElseIf strDatanrOnly = "" Then
    If strMobilsvarnrOnly = "" Then
    strSubject = strResult2
'Mobilsvar er udfyldt og data og fax er blanke
    ElseIf strDatanrOnly = "" Then
    If strFaxnrOnly = "" Then
    strSubject = strResult3
    'Flere felter er udfyldt
    Else
    strSubject = strResult3
   
    End If
    End If
    End If
    End If
   
   
   
   
         
End If
Avatar billede sjap Praktikant
20. august 2005 - 12:00 #1
Det kan være ret svært at finde hoved og hale i sådan en stribe IF-sætninger. Jeg har ikke forsøgt at sætte mig ind i hvilke subjects du ville skrive hvor, så det må du selv klare. Jeg har dog forsøgt at skrive, hvad "tilstanden" er, når du står forskellige steder i programmet. Det lyder lidt kringlet, men det betyder blot at jeg har forsøgt (lidt som du selv havde gjort) at skrive hvilke betingelser, der er opfyldt, når man ender et bestemt sted i programmet. Hmm. Prøv at se på det nedenstående, så er det måske lettere at forstå.


Dim strMobilsvarnrOnly As String
Dim strDatanrOnly As String
Dim strFaxnrOnly As String
Dim strResult1 As String
Dim strResult2 As String
Dim strResult3 As String

'*************
strMobilsvarnrOnly = Range("D51")
strDatanrOnly = Range("E51")
strFaxnrOnly = Range("H51")
'*************
strResult1 = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af " & Range("E49").Text & " ( " & Range("d26").Text & " ) "
strResult2 = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af " & Range("h49").Text & " ( " & Range("d26").Text & " ) "
strResult3 = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af " & Range("d49").Text & " ( " & Range("d26").Text & " ) "
'*************
If strDatanrOnly = "" And strFaxnrOnly = "" And strMobilsvarnrOnly = "" Then
    'Alle felter blanke
    svar = MsgBox("Du skal udfylde enten et Mobilsvarnummer," & vbCrLf _
            & "datanummer eller et faxnummer" & vbCrLf _
            & "før du kan sende skema til MESEF", vbOKOnly)
    Exit Function
Else
    If strMobilsvarnrOnly = "" Then
        If strDatanrOnly = "" Then
            'Fax er udfyldt. MobilSvar og DataNummer er blanke.

        Else
            If strFaxnrOnly = "" Then
                'DataNummer er udfyldt. MobilSvar og Fax er blanke.

            Else
                'DataNummer og Fax er udfyldt. MobilSvar blank.

            End If
        End If
    Else
        If strDatanrOnly = "" Then
            If strFaxnrOnly = "" Then
                'MobilSvar er udfyldt. DataNummer og Fax er blanke.

            Else
                'MobilSvar og Fax er udfyldt. DataNummer er blank.

            End If
        Else
            If strFaxnrOnly = "" Then
                'MobilSvar og Datanummer er udfyldt. Fax er blank.

            Else
                'Alt er udfyldt.

            End If
        End If
    End If
End If
Avatar billede sjap Praktikant
20. august 2005 - 12:02 #2
Kopier det ind i din VBA-editor så er det lettere at læse - og kommentarerne er tydeligere. Husk at du selv skal tilføje dine strsubject = StrResult1 (2 eller 3).
Avatar billede brynil Nybegynder
20. august 2005 - 12:28 #3
Du kan også forsøge med en Select Case:

Dim strMobilsvarnrOnly As String
Dim strDatanrOnly As String
Dim strFaxnrOnly As String
Dim strResult1 As String
Dim strResult2 As String
Dim strResult3 As String

Dim udfyldt As Integer

strMobilsvarnrOnly = Range("D51")
strDatanrOnly = Range("E51")
strFaxnrOnly = Range("H51")

udfyldt = 0

If Not Range("D51") = "" Then udfyldt = udfyldt + 1
If Not Range("E51") = "" Then udfyldt = udfyldt + 2
If Not Range("H51") = "" Then udfyldt = udfyldt + 4

    Select Case udfyldt
    Case Is = 0
        svar = MsgBox("Du skal udfylde enten et Mobilsvarnummer," & vbCrLf _
                & "datanummer eller et faxnummer" & vbCrLf _
                & "Før du kan sende skema til MESEF", vbOKOnly)
                    If svar = vbOK Then Exit Sub
    Case Is = 1
        strsubject = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af " & Range("d49").Text & " ( " & Range("d26").Text & " ) "  'strResult3
    Case Is = 2
        strsubject = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af " & Range("E49").Text & " ( " & Range("d26").Text & " ) "  'strResult1
    Case Is = 4
        strsubject = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af " & Range("h49").Text & " ( " & Range("d26").Text & " ) "  'strResult2
    Case Else
        strsubject = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af " & Range("d49").Text & " ( " & Range("d26").Text & " ) "  'strResult3
    End Select

.. og jeg har heller ikke sat mig ind i dine subjects ;))
Avatar billede pharlap Nybegynder
21. august 2005 - 02:11 #4
hejsa..

Tak for jeres svar.
Jeg prøver dem lige igennem, og så vender jeg tilbage så i kan få jer nogle point..

men på forhånd tak for hjælpen..
Avatar billede sjap Praktikant
21. august 2005 - 10:11 #5
Du kan i øvrigt også forenkle (eller overskueliggøre) strResult linierne

'*************
strStart = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af "
strSlut = " ( " & Range("d26").Text & " ) "
strResult1 = strStart & Range("E49").Text & strSlut
strResult2 = strStart & Range("h49").Text & strSlut
strResult3 = strStart & Range("d49").Text & strSlut
'*************
Avatar billede sjap Praktikant
21. august 2005 - 10:11 #6
Det gælder selvfølgelig også hvis du vælger brynils forslag:

    strStart = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af "
    strSlut = " ( " & Range("d26").Text & " ) "
    Select Case udfyldt
    Case Is = 0
        svar = MsgBox("Du skal udfylde enten et Mobilsvarnummer," & vbCrLf _
                & "datanummer eller et faxnummer" & vbCrLf _
                & "Før du kan sende skema til MESEF", vbOKOnly)
                    If svar = vbOK Then Exit Sub
    Case Is = 1
        strsubject = strStart & Range("d49").Text & strSlut  'strResult3
    Case Is = 2
        strsubject = strStart & Range("E49").Text & strSlut  'strResult1
    Case Is = 4
        strsubject = strStart & Range("h49").Text & strSlut  'strResult2
    Case Else
        strsubject = strStart & Range("d49").Text & strSlut  'strResult3
    End Select
Avatar billede pharlap Nybegynder
22. august 2005 - 02:09 #7
hvad hvis jeg skal have reglen udvidet fra

strMobilsvarnrOnly = Range("D51")
strDatanrOnly = Range("E51")
strFaxnrOnly = Range("H51")

til Range d51:d130
          e51:e130
          h51:h130
Avatar billede sjap Praktikant
22. august 2005 - 16:51 #8
Skal det forstås som at alt det ovenstående skal gennemføres på

D51, E51, H51

og

D52, E52, H52

og

D53, E53, H53

osv.
Altså en kontrol af én linie af gangen? Det kan jeg ikke lige få til at give et fornuftigt resultat - der skal jo så egentligt være et svar for hver linie, og det lægger funktionen jo ikke lige op til. Det kan dog laves relativt enkelt (ved at tilføje områderne til funktionskaldet)


Eller skal funktionen kontrollere om der står mindst ét Mobilsvarnr i område d51:d130, mindst ét Datanr i område e51:e130, og mindst ét Faxnr i område h51:h130. Dermed skal der jo stadig kun returneres ét svar.

Det er lidt svært at beskrive, men jeg håber du forstår.
Avatar billede pharlap Nybegynder
22. august 2005 - 17:56 #9
hejsa.

Hvis man siger at:
D kolonnen repræsenterer Mobilsvar
E kolonnen repræsenterer Datanummer
H kolonnen repræsenterer Faxnummer

Hvis nu der kun er noget i D
Så sendes der en mail feks med subject: Udføres Mobilsvar
Hvis der kun står noget i E så er subject: Udføres Datanummer
Og hvis der kun er noget i H så er subject : Udføres Faxnummer

Men hvis nu at der står noget i blot 2 af felterne på samme linie
så er subject : Udføres Diverse

Nu er jeg så bare interesseret i at hvis man siger at på linie 51 står der kun noget i Mobilsvar.. så er subject jo : Udføres Mobilsvar
men står der bare noget i faxnummer i de underliggende linier i kolonne H så skal subject blive: Udføres Diverse

Håber ikke det var helt volapyk... sender gerne skema hvis det giver bedre mening.
Avatar billede sjap Praktikant
22. august 2005 - 18:43 #10
Hmm. Jeg bliver vist nødt til at bruge et par eksempler:

- hvis der står noget i D48, men ikke noget i E48 og H48, så er subject MobilSvar

- hvis der står noget i E48, men ikke noget i D48 og H48, så er subject Datanr

- hvis der står noget i E48, men ikke noget i D48 og H48, men f.eks. H49 så er subject Diverse?
Avatar billede sjap Praktikant
22. august 2005 - 18:45 #11
Skal alle linierne kontrolleres en af gangen?

Dvs. f.eks. kun linie 49. Derefter testes kun linie 50 osv.
Avatar billede sjap Praktikant
22. august 2005 - 18:48 #12
Kan der forekomme mange numre? Så skal funktionen vel udføres for hver linie - ellers bliver strSubject bar overskrevet.

Jeg tror jeg kan forvirre mig selv mere end højst nødvendigt. Måske er det lettere, hvis jeg får noget konkret at kigge på. Du må gerne prøve at sende det skema du nævnte - så vil jeg se om det ikke kan hjælpe mig lidt på vej.

sjap9000 snabela hotmail punktum com
Avatar billede pharlap Nybegynder
22. august 2005 - 21:54 #13
"Hmm. Jeg bliver vist nødt til at bruge et par eksempler:

- hvis der står noget i D48, men ikke noget i E48 og H48, så er subject MobilSvar

- hvis der står noget i E48, men ikke noget i D48 og H48, så er subject Datanr

- hvis der står noget i E48, men ikke noget i D48 og H48, men f.eks. H49 så er subject Diverse?"

Jep det er lige den funktion
Avatar billede sjap Praktikant
22. august 2005 - 21:58 #14
Det var det jeg frygtede - det var selvfølgelig den besværlige ;0)

Gælder det også for D og E altså, hvis der står noget i f.eks. D48 og ikke noget i E48 og H48, men der står noget i E49?



Jeg er lige kaldt bort, så der går måske lidt tid inden jeg vender tilbage
Avatar billede sjap Praktikant
22. august 2005 - 22:52 #15
Så vidt jeg kan se, så kan der være mange numre. Skal der laves en strSubject for hver række (hvor der er numre), eller skal der bare laves en. Så vidt jeg lige kan se, så er koden kun opbygget til at klare en strSubject.
Avatar billede sjap Praktikant
22. august 2005 - 23:08 #16
Jeg har lavet noget kode her, der kigger på en linie af gangen, men jeg er ikke sikker på at det er det, du er ude efter. Den risikerer at sende 81 beskeder afsted, hvis der står noget på alle rækker.

'*********************************************************************
ActiveWorkbook.Save
'*************

For i = 51 To 130
    strMobilsvarnrOnly = Range("D" & i)
    strDatanrOnly = Range("E" & i)
    strFaxnrOnly = Range("H" & i)
    strMobilsvarFaxOnly = Range("I" & i)
    strSpærUdgKaldOnly = Range("J" & i)
    strDobbeltKortnrOnly = Range("K" & i)

    udfyldt = 0
    If Not strMobilsvarnrOnly = "" Then udfyldt = udfyldt + 1
    If Not strDatanrOnly = "" Then udfyldt = udfyldt + 2
    If Not strFaxnrOnly = "" Then udfyldt = udfyldt + 4
    If Not strMobilsvarFaxOnly = "" Then udfyldt = udfyldt + 8
    If Not strSpærUdgKaldOnly = "" Then udfyldt = udfyldt + 16
    If Not strDobbeltKortnrOnly = "" Then udfyldt = udfyldt + 32

    '*************
    strStart = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af "
    strSlut = " ( " & Range("d26").Text & " ) "
    '*************

    Select Case udfyldt
        Case Is = 0
            svar = MsgBox("Du skal udfylde enten et Mobilsvarnummer," & vbCrLf _
                    & "datanummer, faxnummer, Mobilsvarfax" & vbCrLf _
                    & "spærring af udg. kald eller Dobbelkortnr" & vbCrLf _
                    & "før du kan sende skema til MESEF", vbOKOnly)
                        If svar = vbOK Then Exit Sub
        Case Is = 1
            strSubject = strStart & Range("d49").Text & strSlut  'strResult3
        Case Is = 2
            strSubject = strStart & Range("E49").Text & strSlut 'strResult1
        Case Is = 4
            strSubject = strStart & Range("h49").Text & strSlut  'strResult2
        Case Is = 8
            strSubject = strStart & Range("i49").Text & strSlut 'strResult8
        Case Is = 16
            strSubject = strStart & Range("j49").Text & strSlut 'strResult16
        Case Is = 32
            strSubject = strStart & Range("k49").Text & strSlut 'strResult32
        Case Else
            strSubject = strStart & "diverse" & strSlut  'strResult4
    End Select

    strBody = "Hermed en lille opgave til jer"
    strBody2 = "Med venlig hilsen"
    strBody3 = "" & Range("d30").Text

    With olNewMail
        .Recipients.Add "webmaster@chat-forum.dk"
            '.BCC = "Evaluering"
        '*********
        .Subject = strSubject
        '*********
        '*********
        .Body = strBody & strBody2 & strBody3
       
            With .Attachments
            .Add ThisWorkbook.Path & "\" & ThisWorkbook.Name
            End With
        .Save
        .Display
        '.Send
    End With
Next i

Set olNewMail = Nothing
Set olApp = Nothing
Avatar billede pharlap Nybegynder
23. august 2005 - 07:04 #17
hejsa.
Jeg har ikke testet den kode af endnu, men ja formålet er at den kun sender 1 stk mail og hvis der derefter bare står noget i en af de andre kolonner, længere nede så skal den sende den med subject "diverse"


Så hvis D51 er udfyldt og e71 er udfyldt så er resultatet "diverse"
så i princippet må den vel godt læse kolonnerne?
Avatar billede pharlap Nybegynder
23. august 2005 - 07:36 #18
Så fik jeg lige testet det ved at skrive i d:51 så kører den case 0 på de andre linier.

og ja hvis jeg skriver noget i linien nedenunder i e51 så forsøger den at sende 2 mails og subject bliver så dog blot FAX og ikke diverse...

Ja den er tricky, men er super taknemmelig for at du vil hjælpe..
Avatar billede sjap Praktikant
23. august 2005 - 16:57 #19
Har en ny ide. Kan muligvis trimmes lidt, men det er der jo ingen grund til at bruge tid på, hvis det ikke er det du søger.


ActiveWorkbook.Save
'*************

StartRække = 51
udfyldt = 0

For Each c In Range("D51:D130")
    If c <> "" Then
        udfyldt = udfyldt + 1
        strMobilsvarnrOnly = c
        StartRække = c.Row
        Exit For
    End If
Next

For Each c In Range("E" & StartRække & ":E130")
    If c <> "" Then
        udfyldt = udfyldt + 2
        strDatanrOnly = c
        StartRække = c.Row
        Exit For
    End If
Next

For Each c In Range("H" & StartRække & ":H130")
    If c <> "" Then
        udfyldt = udfyldt + 4
        strFaxnrOnly = c
        StartRække = c.Row
        Exit For
    End If
Next
   
For Each c In Range("I" & StartRække & ":I130")
    If c <> "" Then
        udfyldt = udfyldt + 8
        strMobilsvarFaxOnly = c
        StartRække = c.Row
        Exit For
    End If
Next

For Each c In Range("J" & StartRække & ":J130")
    If c <> "" Then
        udfyldt = udfyldt + 16
        strSpærUdgKaldOnly = c
        StartRække = c.Row
        Exit For
    End If
Next

For Each c In Range("K" & StartRække & ":J130")
    If c <> "" Then
        udfyldt = udfyldt + 32
        strDobbeltKortnrOnly = c
        StartRække = c.Row
        Exit For
    End If
Next


'*************
strStart = "Udføres " & Range("H38").Text & " " & Range("d36").Text & " af "
strSlut = " ( " & Range("d26").Text & " ) "
'*************

Select Case udfyldt
    Case Is = 0
        svar = MsgBox("Du skal udfylde enten et Mobilsvarnummer," & vbCrLf _
                & "datanummer, faxnummer, Mobilsvarfax" & vbCrLf _
                & "spærring af udg. kald eller Dobbelkortnr" & vbCrLf _
                & "før du kan sende skema til MESEF", vbOKOnly)
                    If svar = vbOK Then Exit Sub
    Case Is = 1
        strSubject = strStart & Range("d49").Text & strSlut  'strResult3
    Case Is = 2
        strSubject = strStart & Range("E49").Text & strSlut 'strResult1
    Case Is = 4
        strSubject = strStart & Range("h49").Text & strSlut  'strResult2
    Case Is = 8
        strSubject = strStart & Range("i49").Text & strSlut 'strResult8
    Case Is = 16
        strSubject = strStart & Range("j49").Text & strSlut 'strResult16
    Case Is = 32
        strSubject = strStart & Range("k49").Text & strSlut 'strResult32
    Case Else
        strSubject = strStart & "diverse" & strSlut  'strResult4
End Select

strBody = "Hermed en lille opgave til jer"
Avatar billede sjap Praktikant
23. august 2005 - 16:59 #20
Jeg har "klippet" lidt i den, for jeg har ikke Outlook, der hvor jeg sidder nu, så resten af dit program virker ikke her. Håber du kan finde ud af at "klippe det tilbage"
Avatar billede pharlap Nybegynder
23. august 2005 - 17:38 #21
YES!!!

Så er den der lige i øjet.
Eftersom at jeg har brugt koder fra jer begge, så har jeg hævet pointene, og ville høre om i lige vil smide et svar så i kan få tildelt nogle velfortjente point?

Tusinde tak for hjælpen det i har begge været super.

:O)
Avatar billede sjap Praktikant
23. august 2005 - 17:41 #22
Gerne ;0)
Avatar billede sjap Praktikant
23. august 2005 - 20:43 #23
Mange tak, men skulle brynil ikke have haft nogen point?
Avatar billede brynil Nybegynder
23. august 2005 - 21:18 #24
nope - god arbejdsindstats sjap
Avatar billede pharlap Nybegynder
23. august 2005 - 23:07 #25
Jo det er mig der er totalt newbie til dette site... også dette site ;O)

Brynil jeg har oprettet et spørgsmål og der ligger lidt point og venter på dig..
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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