Samengevoegde document apart opslaan met huidige opmaak

Status
Niet open voor verdere reacties.

MuzeyyenA

Gebruiker
Lid geworden
31 jul 2018
Berichten
8
Beste lezer,

ik heb een document met samengevoegd (excel/word) die ik afzondelijk per brief (ieder 2 pagina's) wil opslaan. Dit heb ik doormiddel van een macro die ik hier heb gevonden gerealiseerd. Echter neemt hij niet de zelfde opmaak mee als dat ik in het samengevoede bestand heb. Regelafstand wordt bijvoorbeeld hoger gegezet waardoor ik meer pagina's krijg. Hoe kan ik dit voorkomen?

De macro die ik momenteel heb is:

PHP:
Sub Splitter()
'------------------------------------------------------------------------------------------------------------------
' splitter Macro
' Macro created by Doug Robbins to save each letter created by a mailmerge as a separate file.
'------------------------------------------------------------------------------------------------------------------
Dim Letters As Integer, Counter As Integer
Dim DocName As String, sRange As String
Dim Pad As String, sNullen As String
Dim aRange As Range

DocName = "Brief "
Pad = "H:\Temp\Word\"

Letters = ActiveDocument.Sections.Count
Selection.HomeKey Unit:=wdStory
Counter = 1

While Counter < Letters
    ActiveDocument.Sections.First.Range.Cut
    Documents.Add
    Selection.Paste
    '-----------------------------------------------------------------------------
    'Naam samenstellen uit 1e alinea van tekst
    '-----------------------------------------------------------------------------
    Set aRange = ActiveDocument.Paragraphs(1).Range
    DocName = aRange.Text
    If Right(DocName, 1) = Chr(13) Or Right(DocName, 1) = Chr(10) Then
        DocName = Left(DocName, Len(DocName) - 1)
    End If
    '-----------------------------------------------------------------------------
    ActiveDocument.Sections(2).PageSetup.SectionStart = wdSectionContinuous
    ActiveDocument.SaveAs FileName:=Pad & DocName & ".doc", FileFormat:=wdFormatDocument, LockComments:=False, _
        Password:="", AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, _
        SaveFormsData:=False, SaveAsAOCELetter:=False
    ActiveWindow.Close
    Counter = Counter + 1
Wend

End Sub
 
Daar kun je niet zo veel aan doen; het probleem ligt niet zozeer in de nieuwe documenten, als wel in het startdocument. Als je een nieuw document maakt, is dat gebaseerd op de standaard stijlen die in de Normal.dotx (dotm) vast zijn gelegd. Daar zit dus ook de regelafstand en alinea-afstand in. Daarnaast kun je in een specifiek document de instellingen aanpassen, en die gelden dan alleen voor dat document. En dat heb je dus zo te zien bij de hand: je brondocument heeft andere stijlen als je in je standaard gebruikt. Dus ofwel je brondocument aanpassen, ofwel je stijlen.
 
Ik heb voor een groot deel mijn brondocument aangepast. Maar er gaat toch niet iets helemaal goed met de kop- en voettekst. Ik krijg nu 3 pagina's per wordbestand ipv 2 pagina's. In de laatste pagina staat geen tekst maar alleen een voettekst. Aan het einde van pagina 2 staat de sectie-einde dus er zou geen pagina 3 moeten komen maar toch komt ie te voorschijn. Enig idee hoe dit kan?
Kan ik bijvoorbeeld ook een sectie-einde in een voettekst plaatsen?

Overigens werkt de marco verder prima dus dank daarvoor!
 
Aan het einde van pagina 2 staat de sectie-einde dus er zou geen pagina 3 moeten komen maar toch komt ie te voorschijn.
Dat hangt een beetje van je instellingen af; als je de sectie op een even of oneven pagina laat beginnen, kan dat best het resultaat zijn. Dat zou niet moeten overigens, maar je weet het maar nooit. Sectie-eindes staan nooit in een voettekst, maar altijd in het document. Dat is namelijk de sectie :). Je kan nog eens naar je marge instellingen kijken, wellicht zijn die toch iets anders dan je brondocument.
 
ik weet niet of ik een nieuw bericht moest plaatsen maar eigenlijk gaat mijn vraag nog om de zelfde macro. Als ik deze macro gebruik krijg ik bestanden die genummerd worden van 1 tot ... Ik wil graag dat daarvoor in de plaats een bepaalde veld in de brief gebruikt wordt. Is het mogelijk dat ik deze macro aanpas zodat hij als bestandnaam het klantnummer in de brief gebruikt?

Alvast bedankt
 
Ik de macro van Doug Robbins 'verbeterd' (weet niet of hij dat ook vind ;) ) zodat hij nu geen nummer gebruikt, maar een alinea uit het document. Meestal een (bedrijfs)naam. Een specifiek veld gebruiken is in deze constructie onmogelijk, omdat je geen velden meer hebt in het eindresultaat. Een samenvoeging gebruikt immers de gegevens uit het veld om nieuwe tekst te genereren. Er zijn dus in de samenvoegbrief geen velden meer die je kan uitlezen. Eerst maar even mijn macro:

Code:
Sub Splitter()
'------------------------------------------------------------------------------------------------------------------
' splitter Macro
' Macro created by Doug Robbins to save each letter created by a mailmerge as a separate file.
' 20140102 Aangepast door OctaFish om documenten los op te slaan m.b.v. de naam in de 1e alinea.
' 20141210 Macro gebruikt nu een functie om op te slaan in een aparte map op de desktop van de user.
'------------------------------------------------------------------------------------------------------------------
Dim Letters As Integer, Counter As Integer
Dim DocName As String, sRange As String, Pad As String
Dim aRange As Range

    DocName = "Brief "
    Pad = CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\Brieven\"
    If CreateFolder(Pad) = "Mislukt" Then
        MsgBox "Het pad kon niet worden aangemaakt; check de gegevens."
        Exit Sub
    End If
    If Not Right(Pad, 1) = Application.PathSeparator Then Pad = Pad & Application.PathSeparator
    
    Letters = ActiveDocument.Sections.Count
    Selection.HomeKey Unit:=wdStory
    Counter = 1
    
    While Counter < Letters
        ActiveDocument.Sections.First.Range.Cut
        Documents.Add
        Selection.Paste
        '-----------------------------------------------------------------------------
        'Naam samenstellen uit 1e alinea van tekst
        '-----------------------------------------------------------------------------
        Set aRange = ActiveDocument.Paragraphs(1).Range
        DocName = aRange.Text
        If Right(DocName, 1) = Chr(13) Or Right(DocName, 1) = Chr(10) Then
            DocName = Left(DocName, Len(DocName) - 1)
        End If
        '-----------------------------------------------------------------------------
        ActiveDocument.Sections(2).PageSetup.SectionStart = wdSectionContinuous
''        ActiveDocument.Convert
        ActiveDocument.SaveAs FileName:=Pad & DocName & ".docx", FileFormat:=wdFormatDocumentDefault
        ActiveWindow.Close
        Counter = Counter + 1
    Wend

End Sub

Code:
Public Function CreateFolder(sFolder As String) As String
On Error GoTo ErrorHandler
Dim sF As String
    
    sF = Left(sFolder, InStrRev(sFolder, "\", Len(sFolder)) - 1)
    If Dir(sF, vbDirectory) = "" Then
      sF = CreateFolder(sF)
      MkDir sF
    End If
    CreateFolder = sFolder
    Exit Function
    
ErrorHandler:
    CreateFolder = "Mislukt"
End Function

Zoals je kunt zien in de code, wordt de eerste alinea gebruikt (Set aRange = ActiveDocument.Paragraphs(1).Range) om een naam te genereren. Staat bij jou de gewenste informatie herleidbaar op een vaste andere plek, dan kun je die uiteraard daar naar laten verwijzen. Lukt dat niet, en moet het echt uit een veld komen dat niet terug te vinden is in je document, dan moet je heel anders gaan samenvoegen. Eigenlijk moet je dan denk ik elk document apart gaan genereren.
 
Beste OctaFish,

Persoonlijk ben ik niet heel goed in macro's. Ik probeer te begrijpen wat deze macro moet doen maar het lukt me niet echt. Ik heb de eerste code geplaatst als macro maar dan doet hij het niet. Ik krijg de melding dat de dat macros's in het project zijn uitgeschakeld. De tweede code begreep ik niet..

klantnummer die ik als bestandnaam erin wil hebben staat op een vaste plek in het document. Maar als hij woord 1 gebruikt van alinea 1 gebruikt dan ben ik al tevreden want het aanpassen daarvan is makkelijker. Ik zoek nu een methode om de macro werkend te krijgen.

Gr. Muzeyyen
 
Ik heb de eerste code geplaatst als macro maar dan doet hij het niet. Ik krijg de melding dat de dat macros's in het project zijn uitgeschakeld.
Dat snap ík dan weer niet :). Maar vermoedelijk heb je de code (beide codes, mag ik hopen) ergens in een nieuwe module (of bestaande) gezet, en dan moeten ze gewoon werken. Als de macrobeveiliging te hoog staat, dan werken macro's niet, dus die beveiliging moet je in je Opties uitzetten. Of in ieder geval zo laag dat macro's vertrouwd worden.
De tweede code (de functie) maakt een map aan en wordt aangeroepen in de eerste. Zou je de tweede niet plaatsen, dan krijg je een foutmelding op deze regel: If CreateFolder(Pad) = "Mislukt" Then.
Verder doet de macro zo'n beetje hetzelfde als de macro die je al hebt getest, alleen pakt hij dan de eerste alinea om daar de naam uit te plukken. (Set aRange = ActiveDocument.Paragraphs(1).Range). Als dat bij jou meerdere woorden zijn, en je wilt de eerste (of de laatste) dan kun je met SPLIT daar dat woord wel mee uit de string vissen.

Kortom: de macro werkt prima 'uit de doos' maar je document moet de macrobeveiliging laag genoeg hebben staan. Hij maakt zelf een map "Brieven" aan in de map <Mijn documenten> van de gebruiker, dus dat zou ook moeten werken.
 
ok het is me gelukt weer een stap verder te komen. Nu krijg ik een nieuwe foutmelding :)
Compileerfout: Syntaxisfout

Het zinnetje wat rood is:
ActiveDocument.SaveAs FileName:=Pad & DocName & ".docx" FileFormat:=wdFormatDocumentDefault

Zie jij zo wat er mis is?
 
Wellicht de Word versie; in dat geval doet de parameter het niet., Of je kunt eens, als hij stopt, controleren of de naam wel correct is (muis boven Pad variabele houden, en boven DocName) en eventueel dus aanpassen.
 
bij Pad verwijst hij wel naar een juiste. maar bij DocName zie ik (DocName = "").
Hoort de macro niet counter +1 te pakken? of de samenstelling uit alinea 1?
 
Laatst bewerkt:
yesss hij doet het!!!!

Hij pakt nu als bestandnaam regel 1 van sectie 2
Is het ook mogelijk dat ik hem verwijz naar de 4e regel van sectie 1????
 
Wat staat er dan in de eerste regel van Sectie 1? Normaal gesproken begint elk samengevoegd document met het eerste record, en alinea 1 (niet te verwarren met regel 1 of regel 4) mag dus nooit leeg zijn.
 
regel 1 is leeg daar staat alleen een enter.
Ik wil graag regel 4 hebben en dan de eerste 10 letters van links.

Wat ik ook nog moet zeggen is dat deze regels in de koptekst zitten.
 
Daar heb je je probleem; als de eerste regel leeg is, dan blijft de variabele DocName natuurlijk ook leeg. Bij dit soort procedures moet je er voor zorgen dat je data consistent is, zodat de output ook consistent is. Dat is blijkbaar niet het geval.
Je praat nog steeds over regel 4; weet je het verschil niet tussen alinea’s en regels, of gaat het daadwerkelijk om de vierde regel van de eerste alinea?

Overigens kun je met deze methode geen tekst uit de koptekst halen. Ik vraag me zelfs af of je kopteksten wel meekrijgt in een samenvoeging; volgens mij kan dat namelijk niet.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan