Mecro voor verzendlijsten

Status
Niet open voor verdere reacties.

SafeConstruct

Gebruiker
Lid geworden
23 apr 2021
Berichten
84
Goeiedag,
Om niet onnodig veel kliks te doen wil ik een macro schrijven die een document aanmaakt voor een bepaald record uit excel. Dit lukt , doch heb ik 2 problemen
1. mijn record is variabel, als ik de macro maak neemt hij telkens dezelfde dus ik wil die variabele telkens invoeren
2. ik wil mijn document dan opslaan op een locatie die ook telkens variabel is, daar daar moet ik de keuze krijgen via explorer de locatie aan te klikken

Ziehier mijn macro

Code:
Sub Verzendlijst()
'
' Verzendlijst Macro
'
'
Naam = InputBox("Bestandsnaam? ", "Naam")
    Application.Move Left:=1420, Top:=41
    Application.Resize Width:=1145, Height:=985
    With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = ActiveDocument.MailMerge.DataSource.ActiveRecord
            .LastRecord = ActiveDocument.MailMerge.DataSource.ActiveRecord
        End With
        .Execute Pause:=False
    End With
    ChangeFileOpenDirectory _
        "C:\Users\Gebruiker\Google Drive\Safe Construct\SC Werven\21000"
    ActiveDocument.SaveAs2 FileName:=Naam, FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False, CompatibilityMode:=15
End Sub

Met dank.
Eric
 
Laatst bewerkt door een moderator:
Allereerst welkom bij HelpMij! Het is gebruikelijk om code op te maken met de CODE tags (knop # zodat die leesbaarder wordt. Dus dat mag je nog even doen :). Ik vind je macro een beetje onhandig, omdat je alleen de naam van het document vraagt, en de extensie dus vergeten kan worden. Die zou ik er dan in de code hard aan toe voegen.
Vraag is nog of je de macro in een sjabloon wilt hebben, in je Normal.dotm of in dit specifieke samenvoegdocument.
 
Macro

Beste,

Alvast dank voor uw hulp, ik ben echt een beginneling hoor op vlak van macro's.
Ik vind de link niet om # te plaatsen ... Kan u mij helpen aub ?
Wat betreft de bestandsnaam : zowel in .docx als .pdf zou mij inderdaad helpen als dit mogelijk is, hier had ik nog niet bij stilgestaan.
De macro is enkel bestemd voor dit basisdocument, genaamd 0000 VGP.docx en dat ik wil wijzigen dan naar een ander nr XXXX VGP.docs en XXXX VGP.pdf

Alvast nogmaals dank.
Eric
 
En als je op de link in de handtekening van Octafish klikt?
 
Ik vind de link niet om # te plaatsen ... Kan u mij helpen aub ?
Het gaat overigens niet om een link, maar om een knop in de werkbalk.

Wat betreft je vraag: het is een stuk makkelijker voor ons als je de bestanden ook meestuurt. Hoeven we die (ik zal je een geheim verklappen: we doen dat uit principe ook nooit) niet zelf te maken :).
 

Bijlagen

  • Code knop.png
    Code knop.png
    55,3 KB · Weergaven: 35
Geachte,

Ik heb nog enkele uren opzoekingen gedaan deze nacht Bekijk bijlage SC Projecten.xlsmBekijk bijlage 0000 VGP.docxen heb nog 1 en ander gevonden waar ik iets wijzer van wordt ... vandaar dat ik nog even de vraag wil herstellen, misschien is dit duidelijker voor jullie hulp :)
Ik heb het word.doc ingevoegd van waaruit de verzendlijst vertrekt, en de xlsx welke de database bevat.

Bij het menu verzendlijst ga ik een geadresseerde zoeken met de kolom C in xlsx. Dus dit is een variante die ik graag in mijn macro wil terugvinden om in te geven op het scherm.

Daarna ga ik het resultaat Voltooien en samenvoegen en krijg ik het nieuwe document.

Dit resultaat wil ik kunnen opslaan maar de map is steeds variabel, dus ik zou hier graag de mogelijkheid krijgen om via bv explorer de weg aan te duiden.

Het resultaat wil ik graag opslaan in zowel .docx als .pdf.
 
Laatst bewerkt door een moderator:
Wonderlijkk dat je je code in bericht #1 niet in Code tags zet, en je laatste antwoord wél. Haal daar de tags weg, zou ik zeggen want nu is je gewone tekst weer niet leesbaar...
 
Na opzoekwerk ivm code tags herzend ik mijn bericht, excuses want voor mij is alles nieuw

Ik heb nog enkele uren opzoekingen gedaan deze nacht en heb nog 1 en ander gevonden waar ik iets wijzer van wordt ... vandaar dat ik nog even de vraag wil herstellen, misschien is dit duidelijker voor jullie hulp :)
Ik heb het word.doc ingevoegd van waaruit de verzendlijst vertrekt, en de xlsx welke de database bevat.

Bij het menu verzendlijst ga ik een geadresseerde zoeken met de kolom C in xlsx. Dus dit is een variante die ik graag in mijn macro wil terugvinden om in te geven op het scherm.

Daarna ga ik het resultaat Voltooien en samenvoegen en krijg ik het nieuwe document.

Dit resultaat wil ik kunnen opslaan maar de map is steeds variabel, dus ik zou hier graag de mogelijkheid krijgen om via bv explorer de weg aan te duiden.

Het resultaat wil ik graag opslaan in zowel .docx als .pdf.
 
Probeer er eerst eens iets leesbaars van te maken. Als je zelf niet weet hoe dan heb je een aantal zaken niet gelezen voordat je lid geworden bent. Je kan aan huijb vragen of hij/zij het voor je wil doen. huijb is de mod van dit forum en kan je bereiken door op de knop 'Attendeer moderator' te klikken.
 
Om niet onnodig veel kliks te doen ...
Ik snap je probleem niet; als je op een normale manier samenvoegt in Word, kun je met twee of drie klikjes het record kiezen dat je wilt hebben. Hoe moeilijk is dat? En hoeveel tijd denk je te winnen als je dat gaat automatiseren? Die macro moet immers ook opgezocht en opgestart worden, en dat kost ook minstens één klik, en tijd. Ik zie geen voordelen van een macro, anders dan dat je bestand nodeloos ingewikkeld wordt.
 
Het zou handig zijn moest ik de macro in het begin lanceren, en dat hij dan alles ineens doet, dus hiermee bedoel ik ook het opslaan op het einde.
Is dit een antwoord op je vraag ?
 
Ik mis de macro in je Word document. Heb je 'm daar nog niet geprobeerd dan?
 
Blijkbaar druk vandaag :)

Ik heb wat zitten proberen zelf, en kom tot deze oplossing:
Code:
Sub Verzendlijst()
Dim Naam As String, Map As String
    Map = ZoekMap("C:\Users\Gebruiker\Google Drive\Safe Construct\SC Werven\21000\")
    With ActiveDocument.MailMerge
        With .DataSource
            .FirstRecord = .ActiveRecord
            .LastRecord = .ActiveRecord
            Naam = .DataFields("FAC").Value & ".docx"
        End With
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        .Execute Pause:=False
        ActiveDocument.SaveAs2 FileName:=Map & "\" & Naam, FileFormat:=wdFormatXMLDocument, CompatibilityMode:=15
    End With
End Sub

Code:
Private Function ZoekMap(Optional Startmap As String) As String
'*********************************************************************************
' Early binding: Microsoft Office 11.0 Object Library of later
Dim fDialog As Office.FileDialog
'*********************************************************************************
' Late binding: gebruik objecten
''Dim fDialog As Object
'*********************************************************************************
Dim varFile As Variant
Dim i As Integer

    '******************************************************************************
    'Opzetten File Dialog met Early Binding.
    Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
    '******************************************************************************
    'Opzetten File Dialog met Late Binding.
    'Set fDialog = Application.FileDialog(4)
    '******************************************************************************
    With fDialog
        '**************************************************************************
        'Pas dit aan voor map met afbeeldingen
        .InitialFileName = IIf(Startmap = "", ActiveDocument.Path & "\", Startmap)
        '**************************************************************************
        .AllowMultiSelect = False
        .Title = "Kies een map.."
        '**************************************************************************
        'Toon het scherm, als methode False teruggeeft is er geen map gekozen.
        '**************************************************************************
        If .Show = True Then
            ZoekMap = .SelectedItems(1)
        Else
            ZoekMap = "Geen map geselecteerd."
        End If
    End With
End Function

De functie Zoekmap maakt gebruik van een Office bibliotheek. Als die niet geladen is, dan doet de functie het niet, maar dan kun je hem nog met Late Binding laten werken. Dan moet je dus wat variabelen die nu als commentaar staan activeren, en de overeenkomende opdrachten deactiveren. De uitleg staat hopelijk duidelijk genoeg in de functie zelf. Kijk maar eens of je hier wat aan hebt. Ik ben dus geen fan van het door de gebruiker laten bepalen van de bestandsnaam, want dat levert nooit eenduidige namen op. Daarom gebruik ik een samenvoegveld, dat je toch al hebt.
 
Op bevel van VenA aangepast :)
 
Beste, hier heb ik zeker wat aan en probeer dit te analyseren.
Ik heb de zoekmap iets gewijzigd op vlak van rootfile, wat me een beter resultaat geeft.
Wat ik nog heb gedaan is een kolom bijgemaakt in xlsx die automatisch een correcte naam van het op te slagen document geeft, jij gebruikte de kolom "FAC". Ik gebruik nu de kolom "CONCAT MACRO VERZENDLIJST".
Doch hier zit ik sloop , en krijg ik een foutmelding 'Fout 5941 tijdens uitvoering : het gevraagde lid van de collectie bestaat niet' en kleurt daarbij mijn gewijzigde Naam aan : Naam = .DataFields("CONCAT MACRO VERZENDLIJST").Value & ".docx"
Dit lijkt me heel bizar :-(

Wat ik probeer bij te voegen maar mij niet lukt is direct bij het openen van het bewaarde document (als het me lukt) te springen naar pagina 4.

Zou u voor beide vragen in deze macro mij een oplossing kunnen bieden aub ?

Alvast oprechte dank hiervoor.
 
Wat bedoel je met ‘springen naar pagina 4’? Neem eens eens macro op die naar pagina 4 springt, en zet die bij de gebeurtenis OnOpen van het document. Dat zou moeten werken. Ik zal eens kijken of dat veld het bij mij wél doet. Wellicht moet het in het document staan om uitgelezen te kunnen worden. Daarom heb ik FAC genomen, want daar heb je data van in het document.
 
Dank alvast voor de feedback. Ik heb het document in .docx aangepast, het veld staat onderaan in de footer, doch dit heeft geen invloed hoor, de error blijft hetzelfde. Ik voeg het aangepaste document toe.

Bekijk bijlage 0000 VGP.docx
 
Beste, ik probeer verder te zwemmen maar het lukt me niet dit te finaliseren.
Ik heb in de docx een veld aangemaakt (deze staat in het geel) en staat eveneens in de footer.
Dit veld haal ik uit de xlsx kolom BY, en zou de naam van het bestand moeten zijn waarin wordt opgeslagen.
Als ik mijn verzendlijst maak baseer ik mij op zoeken 99999-V in het veld DOS-TYPE VALUE. Tot zover alles ok.
Ik dien een map te kiezen via explorer en dan krijg ik de error Fout 5941 tijdens uitvoering : Het gevraagde lid van de collectie bestaat niet.
Bij foutopsporing verwijst VBA naar Naam = .DataFields("CONCAT MACRO VERZENDLIJST").Value & ".docx"
Kan u mij aub verder helpen, dit is echt een must voor mij om hiermee verder te kunnen.
Ik zend mijn aangepaste files mee.
Alvast bedankt.
 

Bijlagen

  • 0000 VGP - HM.docx
    103,6 KB · Weergaven: 57
  • SC Projecten voor macro HM.xlsm
    64,2 KB · Weergaven: 46
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan