• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Code van Ron de Bruin voor versturen van E-mail geeft foutmelding

Status
Niet open voor verdere reacties.

peter59

Terugkerende gebruiker
Lid geworden
21 mei 2007
Berichten
2.698
Besturingssysteem
Windows 11
Office versie
Office 365
Hallo,

Ik tracht via een code van Ron de Bruin een werkblad te versturen met in de body een tekst die op een aparte sheet staat.
Onderstaande code gebruik ik.
Code:
Sub Mail_Every_Worksheet()
'Working in Excel 2000-2013
'For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm
    Dim sh As Worksheet
    Dim wb As Workbook
    Dim FileExtStr As String
    Dim FileFormatNum As Long
    Dim TempFilePath As String
    Dim TempFileName As String
    Dim OutApp As Object
    Dim OutMail As Object

    TempFilePath = Environ$("temp") & "\"

    If Val(Application.Version) < 12 Then
        'You use Excel 97-2003
        FileExtStr = ".xls": FileFormatNum = -4143
    Else
        'You use Excel 2007-2013
        FileExtStr = ".xlsm": FileFormatNum = 52
    End If

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

    Set OutApp = CreateObject("Outlook.Application")

    For Each sh In ThisWorkbook.Worksheets
        If sh.Range("A1").Value Like "?*@?*.?*" Then

            sh.Copy
            Set wb = ActiveWorkbook

            TempFileName = "Alarmoverzicht " & sh.Name & " van " _
                    & Format(Now, "dd-mm-yy")

            Set OutMail = OutApp.CreateItem(0)

            With wb
                .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum

                On Error Resume Next
                With OutMail
                    .to = sh.Range("A1").Value
                    .CC = ""
                    .BCC = ""
                    .Subject = "TEST"
                     [COLOR="#FFD700"]   Body = strbody
                    Dim cell As Range
                    Dim strbody As String
                        For Each cell In ThisWorkbook.Sheets("Tekst Email").Range("A1:A60")
                        strbody = strbody & cell.Value & vbNewLine_
                Next[/COLOR]                    .Attachments.Add wb.FullName
                    'You can add other files also like this
                    '.Attachments.Add ("C:\test.txt")
                    .Send   'or use .Display
                End With
                On Error GoTo 0

                .Close savechanges:=False
            End With
            
            Set OutMail = Nothing

            Kill TempFilePath & TempFileName & FileExtStr

        End If
    Next sh

    Set OutApp = Nothing

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
End Sub
Het wil maar niet lukken.
Krijg steeds een foutmelding.

Zie bijlage. Hopelijk verschaft deze meer duidelijkheid over dat gene wat ik bedoel.

Dank alvast voor het meedenken.

Mvg
Peter.
 

Bijlagen

Precies wat de melding zegt, de variabele strbody is niet gedeclareerd.
Zet er bovenin dus het volgende bij:
Dim strbody As String

En haal hem weg waar hij nu staat.
Nu gebruik je die variabele voordat deze is gedeclareerd.
 
Hoi,

Code:
 Dim cell As Range
Dim strbody As String
Deze twee moeten bovenaan in je routine
Volgend voorbeeldje werkt ok, ( met enkele tips van Edmoor en Octafish :thumb:)is echter maar voor het actieve werkblad, met een beetje sleutelen kan je dat aanpassen)

Groetjes
 

Bijlagen

Of verwijder bovenaan: 'Option Explicit'
Dan zal je macro ook werken.
 
Hallo Edmoor

Heel hartelijk dank voor het meedenken.
Hier had ik helemaal overheen gekeken.
De code verzend nu de desbetreffende sheet maar de tekst wat in de body dient te staan wordt niet in de E-mail weergegeven.
Waar kan dat aan liggen?

Nogmaals dank voor je support.

Mvg
Peter
 
Als je de tip van zpatr gebruikt kan je alle Dim opdrachten verwijderen. in het stukje code dat je nu gebruikt kan dat best, maar in projecten met meerdere Subs, Modules en Formulieren zou ik Option Explicit toch echt laten staan.
 
Laatst bewerkt:
De code verzend nu de desbetreffende sheet maar de tekst wat in de body dient te staan wordt niet in de E-mail weergegeven.
Waar kan dat aan liggen?

Dat zal zijn omdat je die variabele pas vult nadat je deze hebt gebruikt.
 
Oké Zapatr

Ik wist niet dat Option Explicit hier invloed op had.

Dank.

Mvg
Peter
 
Die Option Explicit is ervoor om te zorgen dat je verplicht bent je variabelen te declareren en van het juiste datatype te voorzien. Dat heeft in grotere projecten zo z'n voordelen qua geheugengebruik en debugging.
 
Hallo Edmoor

Dat begrijp ik ff niet.
Dat zal zijn omdat je die variabele pas vult nadat je deze hebt gebruikt.
 
Je doet eerst een .Body = strbody en daaronder ga je de variabele strbody pas vullen. Bij de .Body is deze dus nog leeg. Daarnaast staat er Body in plaats van .Body
 
Laatst bewerkt:
Edmoor,

Dank voor je opmerkzaamheid.
De Body had ik al gewijzigd in .Body

De variabele strbody is toch gevuld?
Of zie ik wederom iets over het hoofd?
Code:
.Body = strbody
                Dim cell As Range
                [COLOR="#0000CD"]For Each cell In ThisWorkbook.Sheets("Tekst Email").Range("A1:A60")[/COLOR]
                strbody = strbody & cell.Value & vbNewLine
            Next

Mvg
Peter
 
Wat ik zeg, je geeft eerst de inhoud van strbody aan .Body door en daarna ga je strbody pas vullen. Dat moet dus andersom.
Code:
                Dim cell As Range
                For Each cell In ThisWorkbook.Sheets("Tekst Email").Range("A1:A60")
                strbody = strbody & cell.Value & vbNewLine
            Next
.Body = strbody

Daarnaast moet die Dim Cell As Range daar ook weg, die hoort bovenin bij de andere declaraties, al levert dat geen probleem op.

Dat je niet eerst hebt opgemerkt dat er Body stond in plaats van .Body is dus een gevolg van het niet gebruiken van Option Explicit.
 
Laatst bewerkt:
Hallo Edmoor

Werkelijk, je bent een kanjer.
Dit had ik zelf met mijn abominabele kennis van VBA niet kunnen achterhalen.
Ik ben uit gegaan van de beschrijving van Ron de Bruin.
Ik heb het verkeerd begrepen of Ron heeft het e.e.a. niet in de juiste volgorde gezet.

Or use this if you want to use cell values from a range
Code:
     Dim cell As Range
    Dim strbody As String
    For Each cell In ThisWorkbook.Sheets("Sheet1").Range("C1:C60")
        strbody = strbody & cell.Value & vbNewLine
    Next
Change the Body line to .Body = strbody to use the string in the body.

Het e.e.a. werkt nu als een tierelier.

Edmoor, nogmaals hartelijk dank voor je geduld en de genomen moeite.
De zondag kan niet meer stuk.

Mvg
Peter.
 
Graag gedaan Peter :)
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan