nadat selecteren van regels, deze via mail naar vast mailadres verzenden

Status
Niet open voor verdere reacties.

rkootje

Gebruiker
Lid geworden
24 okt 2011
Berichten
61
Hallo,
ik heb een probleem, ik heb een excellijst, in deze lijst worden regelmatig regels toegevoegd, deze nieuwe regels dienen aan het einde van de dag te worden verzonden, maar enkel die regels. nu heb ik een code gemaakt die, als je op de cmbverzenden drukt, die nieuwe regels voorziet in (Rij, 11) van de huidige datum.
wanneer de datum wordt toegevoegd, dienen deze regels gekopieerd te worden in de body van een vast emailadres. wie kan me hiermee helpen, ben echt net beginner en ben me wezeloos aan het zoeken. ik heb al veel gevonden op de site, maar niets werkt zoals nodig.

Code:
Option Explicit

Private Sub cmbVerz_Click()

    Dim Rij As Integer
    Dim i As Integer
    Rij = 5
    Dim Straat As String
    Dim HuidigeDatum As Date
    'Als er nieuwe items zijn toegevoegd, en je drukt op verzenden komt er een "ja"in de kolom verzonden
     ActiveSheet.Unprotect
    
    Do Until Cells(Rij, 2) = ""
        Straat = Cells(Rij, 2)
        If Cells(Rij, 2) <> "" And Cells(Rij, 11) = "" Then
        Cells(Rij, 11) = Format(Date, "dd/mm/yyyy")
        
    
        End If

        Rij = Rij + 1
    Loop
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
    Exit Sub
    
End Sub
 
Hallo rkootje,

Je vraag is mij ongeveer wel duidelijk, maar je zet reeds verzendingsdatums in je sheet vóór je email verzonden is. Is het niet beter om eerst je emailprogramma te lanceren, en als het mailen succesvol is, dan pas de datums in te vullen?

Uitgaande van dat scenario vind je in bijlage een rudimentair programmatje om eventueel op verder te borduren.

Grtz,
MDN111.
 

Bijlagen

Laatst bewerkt:
Beste MDN111, bedankt voor je input

Je hebt me echt een eind op weg geholpen, dank je wel, ik ben zoals gezegd nog maar net bezig met VBA en dan begint het je soms echt te duizelen voor de ogen, maar dit ziet er al goed uit, echter heb ik toch nog een kleine vraag.
nu wordt, alleen de laatse cel uit de rij voor de datum vermeld in de body van de mail, echter dient de gehele regel vermeld te worden
de datum staat in kolom 11 maar ik moet tot kolom A verled hebben in de mail.
kun je me hier nog mee helpen,
alvast bedankt!
 
Beste rkootje,

Als ik het goed begrijp bestaat iedere rij van je sheet uit 11 kolommen waarvan de laatste dient voor de verzendingsdatum. En je wil per rij de gegevens uit de eerste 10 kolommen achter elkaar als lijn in de emailtekst.

Dat doet wel enkele vragen rijzen:

  • Bestaat de mogelijkheid dat er lege cellen in een rij zitten?
  • Hoe moet de schikking in de emailtekst eruit zien?

Bestaat de mogelijkheid dat je een voorbeeld geeft hoe een rij uit je sheet eruit ziet en hoe de overeenstemmende rij in de emailtekst er moet uit zien?

Grtz,
MDN111.
 
Hoi MDN111

Sorry, ik heb een aantal keren geprobeerd om het bestandje te sturen, echter krijg ik foutmeldingen, vandaar dat ik het je zo probeer uit te leggen,
ik heb 11 kolomen van A tot en met K, waarvan K, de kolom is waar de datum in dient te komen van verzonden. 1e kolom staat de datum van de opname, 2e straat 3e huisnummer, 4e evt toevoegingen van het huisnummer ( dus vaak leeg) verder nog een aantal kolomen waar niet perse iets in kan komen te staan.
het mooiste is dat alles in dezelfde volgorde wordt weergegeven dus kolom a, b, c etc.
als de kolom leeg is mag de ruimte wel vrijblijven.
ik hoop dat het zo duidelijk is,
alvast bedankt voor je moeite
 
Laatst bewerkt:
Dag rkootje,

In bijlage een verbeterde versie. De volledige nieuwe regels komen nu in de mail terecht. Er blijft echter nog een probleem. Om de kolommen deftig uit te lijnen heb ik de gegevens aangevuld met een gepast aantal spaties. Als de tekst in de mail gevormd is met proportionele fonts dan gaat de uitlijning in de mist.

Om toch een goede uitlijning te bekomen moet je de regels in de mail selecteren en omzetten naar een niet-proportionele font Courier New. Deze omzetting zou ook via VBA moeten kunnen gebeuren, maar daar ben ik tot hiertoe niet in staat.

Grtz,
MDN111.
 

Bijlagen

Hoi MDN111 top bedankt!

Bekijk bijlage Overzichtlijst Docasa asbest(3) .xls.pdfhet begint er al op te lijken, maar als je inderdaad de regels zo ziet staan, is het wel een rommeltje, is het niet mogelijk dat een deel van het werkblad wordt gekopieerd?
ik bedoel, als je dit voorbeeld ziet kan je dan niet zeggen dat de kop (regel 3 van A3:J3) sowieso wordt afgedrukt, wanneer er regels bij zijn zonder datumvermelding in kolom K en dat die regels dan niet worden gekopieerd in de mail? dan zie je namelijk de complete opmaak voorzien van de juiste info.
 

Bijlagen

Laatst bewerkt:
Test deze eens. Vul een aantal datums in (of geen). Zet in G1 het emailadres v/d ontvanger en klik op de knop.
 

Bijlagen

Dag Warme bakkertje

Dank zij de verduidelijking van rkootje begrijp ik het nu beter. Hij wil een tabel in de mailbody met headers en datalijnen.

Wat is interssant vind is jou invalshoek op dit probleem. Jij werkt niet met een Outlook object en een MailItem object, maar vanuit de Workbook. Ik heb je code bestudeerd en ik begrijp ze wel. Alleen werkt ze bij mij niet. Ze loopt vast op de regel
Code:
ActiveWorkbook.EnvelopeVisible = True
Enig idee waarom?

Grtz,
MDN111
 
Schakel deze regel eens uit en zie of de code verderloopt (normaal wel want deze regel heeft geen belang voor het verzenden v/h werkblad)
 
Dag Warme bakkertje,

Ik heb gedaan zoals je zei, maar dan loopt de code vast op de volgende lijn
Code:
With .Parent.MailEnvelope

Volgens mij heeft het iets maken met de configuratie van Outlook op mijn werk-PC. Of misschien wel met het feit dat Excel 2002 SP3 geïnstalleerd is, samen met Outlook 2010. Dat komt zo omdat wij in het bedrijf zijn overgeschakdeld van TeamWare Mail naar Outlook 2010, terwijl de Excel-versie ongewijzigd is gebleven. De reden waarom ik dat denk is omdat het ook niet lukt rechstreeks vanuit een sheet met Menu->File->Send to->Mailrecipient.

Op m'n privé PC werkt het blijkbaar wel want de code ActiveWorkbook.EnvelopeVisible = True veroorzaakt het opstarten van Outlook.

Op het werk zijn er nochtans enkele collega's die zonder problemen mailen vanuit Excel met behulp van macro's waar ik Outlook aanroep met
Code:
CreateObjec("Outlook.application")

Ik vermoed dat het ook mogelijk is om een Range te "pasten" met behulp van code die het Outlook-object gebruikt. Nog even de uitdaging om daar achter te komen (Het zou leuk geweest zijn als we een macro konden opnemen in Outlook).
 
Hallo Warme bakkertje,

Die code van Ron De Bruin ziet er mooi uit. Bedankt voor de tip !

@rkootje,
Aan de hand van de code van Warme bakkertje en aangevuld met die van Ron De Bruin zou je toch in staat moeten zijn om het voor elkaar te krijgen. Ikzelf ben tot begin december niet meer in de mogelijkheid om er mij mee bezig te houden, maar als ik terug ben ga ik zeker deze topic nog een opzoeken.

Grtz,
MDN111.
 
beiden enorm bedankt!

ik denk dat het zo inderdaad gaat lukken,
bedankt voor het meedenken en kijken!
 
Warme bakkertje, nog een klein vraagje.

Na het verzenden dient in de laatste kolom (K) bij de te verzenden regels een datum te komen.
het is me deels gelukt, maar hij geeft de datum van morgen weer???
kun je me laten zien in dit voorbeeld hoe het anders gaat?

alvast bedankt
 
Met deze zou je de huidige datum moeten krijgen.
Code:
With Sheets("Sheet1")
        For Each cl In .Range("K5:K" & .Cells(Rows.Count, 1).End(xlUp).Row)
            If cl = "" Then cl.Value = Format(Date, "dd/mm/yyyy")
        Next
    End With>

Post anders eens een voorbeeld met de code die je nu gebruikt.
 
Laatst bewerkt:
Hoi Warme bakkertje,

hieronder heb ik de code, echter zou je die wel kennen denk ik,
de versie met het invoegen van de datum heb ik verwijderd,
maar de bedoeling is,
wanneer je op vezenden klikt ( knop op het form) dienen de regels waar geen datum achter staat in de kolom K geselecteerd te worden en verzonden, ( doet die keurig nu, enkel is het jammer dat de kolombreedte niet gelijk is als de indeling van Sheet1)
maar na de selectie dient achter de geslecteerde regel in kolom K de datum van verzending te komen.

Code:
Sub AdvancedFilter()
    Sheets("Blad2").Cells.ClearContents
    Range("A3:K1000").AdvancedFilter xlFilterCopy, [Sheet1!K1:K2], [Blad2!a65536].End(xlUp).Offset(1), False
    For i = 1 To 11
        Sheets("Blad2").Columns(i).AutoFit
    Next
    Send_Range_Or_Whole_Worksheet_with_MailEnvelope
    
End Sub

Sub Send_Range_Or_Whole_Worksheet_with_MailEnvelope()
    Dim AWorksheet As Worksheet
    Dim Sendrng As Range
    Dim rng As Range

    On Error GoTo StopMacro
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    'Fill in the Worksheet/range you want to mail
    'Note: if you use one cell it will send the whole worksheet
    Set Sendrng = Worksheets("Blad2").Range("A2:K15")
    'Remember the activesheet
    Set AWorksheet = ActiveSheet
    'Create the mail and send it
    With Sendrng
        ' Select the worksheet with the range you want to send
        .Parent.Select
        'Remember the ActiveCell on that worksheet
        Set rng = ActiveCell
        'Select the range you want to mail
        .Select
        ' Create the mail and send it
        ActiveWorkbook.EnvelopeVisible = True
        With .Parent.MailEnvelope
            ' Set the optional introduction field thats adds
            ' some header text to the email body.
            .Introduction = "Dit zijn de laatste inspecties."
            ' In the "With .Item" part you can add more options
            ' See the tips on this Outlook example page.
            ' http://www.rondebruin.nl/mail/tips2.htm
            With .Item
                .To = Sheets("Sheet1").Range("G1").Value
                .Subject = "asbestinspectie t.b.v. Renovatie Docasa"
                .Send
            End With
        End With
        'select the original ActiveCell
        rng.Select
    End With
    'Activate the sheet that was active before you run the macro
    AWorksheet.Select
    

    
    
StopMacro:
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
    ActiveWorkbook.EnvelopeVisible = False
    
End Sub
 
Code:
Sub AdvancedFilter()
    Sheets("Blad2").Cells.ClearContents
    Range("A3:K1000").AdvancedFilter xlFilterCopy, [Sheet1!K1:K2], [Blad2!a65536].End(xlUp).Offset(1), False
    For i = 1 To 11
        Sheets("Blad2").Columns(i).AutoFit
    Next
    Send_Range_Or_Whole_Worksheet_with_MailEnvelope
    With Sheets("Sheet1")
        For Each cl In .Range("K5:K" & .Cells(Rows.Count, 1).End(xlUp).Row)
            If cl = "" Then cl.Value = Format(Date, "dd/mm/yyyy")
        Next
    End With
End Sub
 
Bedankt, werkt prima nu!

Hoi Warme bakkertje,

het werkt prima nu.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan