Werkende VBA-code aanpassen

Status
Niet open voor verdere reacties.

Torben

Gebruiker
Lid geworden
27 apr 2017
Berichten
46
Wie is zo aardig om een werkende macro voor mij aan te passen? Naam aan te passen macro: "Email_Urenstrookjes_PDF". Code is van van Ron de Bruin. De code werkt bij mij.
Ik wil graag dat de locatie van zoeken naar emailadressen wordt aangepast en ik wil graag het bereik dat dan vervolgens gemaild wordt, wordt aangepast.
Gedetailleerde wens staat bovenaan als opmerking in de macro "Email_Urenstrookjes_PDF"

Mijn wens:
Situatie nu: De macro zoekt nu in alle tabbladen in A1 naar emailadressen en mailt het tabblad met emailadres als pdf-bijlage naar het emailadres. Dit wil ik anders.
Wat wil ik graag anders en lukt me niet zelf:
Zoek alleen naar emailadressen in een specifiek bereik in 1 tabblad Sheets("Invoer").Range("E8:E42")
Wanneer er een emailadres staat, mail dan het bijbehorende bereik (deze bereiken zijn de persoonlijke urenstrookjes van mijn collega's). Deze urenstrookjes bevinden zich allemaal in 1 sheet onder elkaar, de sheet ("UrenstrookjeA4")
Precieze coordinaten bereiken staan als bijlage in de macro.

In de bijlage bevind zich een 2e werkende macro (thanx SjonR van het forum hier).
Deze macro maakt PDF bestanden van alle 'ingevulde' urenstrookjes. Wellicht handig om daar een deel van de code van de gebruiken.

Bekijk bijlage Rooster voorbeeld voor forum4.xlsm
 
Dit kan toch nooit werken? Je zoekt in kolom A (Cel a1 zelfs) naar een email adres, wat er niet is want die staan in kolom E. En waarom zou je een loop maken door de werkbladen? Je heb er maar twee en je weet precies waar wat zou moeten staan. Bovendien zitten er alleen maar foutverwijzingen in blad UrenStrookjeA4 en dat werkt ook niet geweldig.
 
Als ik geen auto kan repareren en dat ook niet wil leren ga ik gewoon naar de garage en betaal ik de monteur.
 
Je zoekt in kolom A (Cel a1 zelfs) naar een email adres, wat er niet is want die staan in kolom E.
Mijn vraag is om de vba formule zo te verbouwen dat hij i.p.v. zoeken in A1 in alle bladen, gaat zoeken in 1 blad (kolom E8:E42).
Wanneer ik in mijn originele bestand een tabblad toevoeg met mijn emailadres in A1 stuur ik mezelf een emailtje. Het werkt. Maar mijn vraag is dus hoe ik het gebied waar emails worden gezocht kan veranderen.
Ik heb van alles geprobeerd, maar het lukt me niet om de macro correct aan te passen. Er blijven foutmeldingen ontstaan.

Bovendien zitten er alleen maar foutverwijzingen in blad UrenStrookjeA4 en dat werkt ook niet geweldig.
Mijn echte rooster bestaat uit 15 bladen en is 1,7 MB groot. Ik heb alleen de nodige bladen laten staan, dat is ook de reden voor de foutverwijzingen. De bladen waar naar wordt verwezen bestaan in dit bestand niet.

Als je mij wilt helpen door de macro aan te passen zodat er gezocht wordt in Invoer(E8:E42) en dan de bereiken uit UrenstrookjeA4 mailen ipv huidige sheet, dan zou ik je zeer dankbaar zijn.
 
Laatst bewerkt:
Als ik geen auto kan repareren en dat ook niet wil leren ga ik gewoon naar de garage en betaal ik de monteur.

Ik ga er vanuit dat je suggereert dat ik het niet wil leren? Dat klopt niet, het lukt me echter niet het voor elkaar te krijgen.
En ik ben altijd bereid eerlijk te betalen voor eerlijk werk. Zo heb ik gedoneerd aan de site van Ron de Bruin voor het gebruik van zijn emailmacro's.
Heb ook contact gehad met een excelhulp bedrijf, maar zij gaven aan dat het niet mogelijk is om excel via vba met outlook te laten communiceren.
Dus toen besloot ik het hier te vragen. Als iemand het leuk vind me te helpen, graag.
Zo nee, dan laat ik me graag doorverwijzen naar een garages die mijn auto wel kan aanpassen naar wens.
 
Hey, is die site van jou :) Wat leuk. Die had ik idd gevonden. Ik bedoelde ook niet aan te geven dat ík dacht dat het niet kon, een man van een vba/excel-hulp bedrijf zei dat.
Zoals ik in mijn bovenste post aangaf werkt mijn bestand zoals ik wil, behalve 2 dingen:
Er wordt in het 'verkeerde' gebied naar emailadressen gezocht en de bereiken zijn niet de juiste. Dat aanpassen is alles wat ik vraag.
Het lukt me niet dit zelf te doen.
 
Waar komen de gegevens van periode 2; Komen die op dezelfde plaats of onder periode 1 ?
 
Op dezelfde plaats, in een nieuw bestand.
We nemen steeds hetzelfde 'blanco' bestand als basis om dan 'opslaan als periode X' te doen. ('X' wordt dan het periode nummer) In een jaar hebben we dan 13 periodes.
 
Verwijder de samengevoegde cellen in je urenstrookje van kolom A en centreer het over die drie kolommen.

Dit is dan de gehele code.
Code:
Sub hsv()
Dim sv, i As Long, c As Range, strBody As String
with CreateObject("Outlook.Application")
sv = Sheets("invoer").Range("a8:e42")
For i = 1 To UBound(sv)
If sv(i, 5) <> "" Then Set c = Sheets("urenstrookjeA4").Columns(1).Find(sv(i, 1) & " " & sv(i, 2), , xlValues, xlWhole)
 If Not c Is Nothing Then
  c.Resize(35, 11).ExportAsFixedFormat 0, "c:\Users\Dijkstra\Documents\lonen\Urenstrookjes\" &  sv(i, 1) & ", " & c.Offset(1)
  With .CreateItem(0)
        .To = sv(i, 5)
        .Subject = "Urenstrookje " & Sheets("invoer").Range("a1") & " " & Sheets("invoer").Range("b1")
          strBody = "<font size=""4"" face=""Comic Sans MS"" color=""darkblue"">" & _
                                            "<body>Beste " & sv(i, 1) & "," & _
                                            "<br><br>" & "Dit urenstrookje kan je gebruiken om te controleren of de geboekte uren kloppen." & _
                                            "<br>" & "Als er iets niet lijkt te kloppen kan je contact opnemen met xxx of mij." & _
                                            "<br><br>" & "Met vriendelijke groet," & _
                                            "<br>" & "xxx</body>"
        .HTMLBody = strBody & "<br>" & .HTMLBody
        .Attachments.Add "c:\Users\Dijkstra\Documents\lonen\Urenstrookjes\" & sv(i, 1) & ", " & c.Offset(1) & ".pdf"
        .Display
  End With
 End If
Next i
end with
End Sub
 
Laatst bewerkt:
@HSV

het lijkt me niet nodig 'tig' instanties van Outlook te maken.
 
Verklaar je nader.
 
Maakt in mijn ogen geen verschil (althans ik bemerk er niets van).
 
Misschien moet je iets minder drinken.
 
Verwijder de samengevoegde cellen in je urenstrookje van kolom A en centreer het over die drie kolommen.

Dit is dan de gehele code.
Code:
Sub hsv()
Dim sv, i As Long, c As Range, strBody As String
with CreateObject("Outlook.Application")
sv = Sheets("invoer").Range("a8:e42")
For i = 1 To UBound(sv)
If sv(i, 5) <> "" Then Set c = Sheets("urenstrookjeA4").Columns(1).Find(sv(i, 1) & " " & sv(i, 2), , xlValues, xlWhole)
 If Not c Is Nothing Then
  c.Resize(35, 11).ExportAsFixedFormat 0, "c:\Users\Dijkstra\Documents\lonen\Urenstrookjes\" &  sv(i, 1) & ", " & c.Offset(1)
  With .CreateItem(0)
        .To = sv(i, 5)
        .Subject = "Urenstrookje " & Sheets("invoer").Range("a1") & " " & Sheets("invoer").Range("b1")
          strBody = "<font size=""4"" face=""Comic Sans MS"" color=""darkblue"">" & _
                                            "<body>Beste " & sv(i, 1) & "," & _
                                            "<br><br>" & "Dit urenstrookje kan je gebruiken om te controleren of de geboekte uren kloppen." & _
                                            "<br>" & "Als er iets niet lijkt te kloppen kan je contact opnemen met xxx of mij." & _
                                            "<br><br>" & "Met vriendelijke groet," & _
                                            "<br>" & "xxx</body>"
        .HTMLBody = strBody & "<br>" & .HTMLBody
        .Attachments.Add "c:\Users\Dijkstra\Documents\lonen\Urenstrookjes\" & sv(i, 1) & ", " & c.Offset(1) & ".pdf"
        .Display
  End With
 End If
Next i
end with
End Sub

Hartstikke bedankt voor de moeite!
Er gaan echter nog 3 dingen mis:

1: Iedereen krijgt dezelfde range gemaild, namelijk A1:K39.
Deze range bevat de informatie van 1 collega van me, en moet alléén gestuurd worden naar het bóvenste emailadres (E8)
Emailadres Invoer.E9 krijgt dan range UrenStrookjeA4.A40:K78 ( <--- dat is 39 rijen naar beneden)
Emailadres E10 krijgt dan A79:K117 ( <--- dat is 39 rijen naar beneden)
etc etc etc t/m als laatste
Emailadres E42 krijgt dan A1327:K1365

2: De emails worden niet automatisch verzonden.

3: Er worden emails gemaakt voor velden uit E8:E42 die geen emailadres bevatten.
 
Er gaat maar één kleinigheidje mis.

1: dat heb je dan niet goed getest.
2: gebruik .send ipv .display
3: Ik ga er vanuit dat sv(i,5) een geldig mailadres is anders leeg, als het leeg is kan het niets aanmaken.
Code:
[COLOR=#3E3E3E][I]If sv(i, 5) <> "" Then Set c = [/I][/COLOR]
 
Laatst bewerkt:
Ik heb 2 verschillende echte emailadressen van mijzelf ingevuld in E8 en E9 en .Send ingevuld
Daarna jouw macro uitgevoerd.
Het werkt! Heel fijn!

Er komt echter nog wel de foutmelding:
Microsoft Visual Basics
Fout -2147467259 (80004005) tijdens uitvoering:
We moeten weten naar wie we dit moeten verzenden. Zorg ervoor dat u ten minste één naam invoert.

Wellicht probeert de macro toch een email te zenden naar een leeg veld als geadresseerde? Is dat wat deze foutmelding zegt?

Toen de mailtje nog niet automatisch verzonden werden 'plukte' ik wat bijlages uit de opgestarte onverzonden mailtjes. Die leken hetzelfde te zijn qua inhoud, maar dat maakt niet uit want hij doet het nu :)
Hoe dan ook, de correcte bijlages worden nu verzonden tijdens mijn laatste test.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan