20. august 2005 - 11:04Der 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
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
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.
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).
Dim strMobilsvarnrOnly As String Dim strDatanrOnly As String Dim strFaxnrOnly As String Dim strResult1 As String Dim strResult2 As String Dim strResult3 As String
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 ;))
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.
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.
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.
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.
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.
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
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
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?
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
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
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"
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.
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..
Synes godt om
Ny brugerNybegynder
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.