• 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.

Word documenten genereren

Status
Niet open voor verdere reacties.

EliaNieuwhuis

Gebruiker
Lid geworden
23 jul 2015
Berichten
77
Hallo,

Er bestaat een mogelijkheid om vanuit Excel in een map Word-documenten aan te maken
met de naam van de inhoud van een CEL. Ik heb een spreadsheet met 1800 regels.
Elke regel is een artikel waarvan een productsheet in Word moet worden aangemaakt.

Bijv.

KOLOM A
6001
6002
6003

Moet worden:
6001.docx
6002.docx
6003.docx

---

Maar, ik wil niet alleen lege Wordfiles op nummer. Ik wil ook de inhoud van de regel in het Worddocument zichtbaar.
Het gaat om zo`n 22 kolommen met inhoud.

Nu heb ik gezien dat het mogelijk is. Ik heb van diverse pagina`s een Macro gevonden die dit
zou kunnen uitvoeren. De macro voer ik in en draai ik. Maar ze werken geen van allen.

Subvraag: In de macro zou toch het het path moeten staan waarin de documenten moeten worden gegenereerd?

Ik ben overigens geen Macro-expert, dus uitleg graag op basisschool niveau :)

Bij voorbaat dank voor de moeite
 
Plaats even een voorbeeld van je excelbestand.
VBA zit niet in het basisonderwijs. Vrijwilligers hier kunnen macrootjes voor je maken, maar als je het ook wilt snappen zul je je er echt in moeten verdiepen.
 
Zoals je het uitlegt kun je het net zo goed in Word maken met een samenvoegdocument. Op basis van het eerste veld (zal dan in de eerste regel staan) kun je het samengevoegde document splitsen en de 1e alinea als naam gebruiken. Zo'n macro heb ik wel en gebruik ik regelmatig zonder problemen. Blijkbaar heb je een aantal macro's gevonden die niet werken; leuk, maar wij kunnen uiteraard niet ruiken welke macro's je al hebt. Dus op zijn minst die macro's posten, zou ik zeggen! En als je dat doet: maak ze op met de CODE tag/knop, dat scheelt weer opmerkingen over het (niet gebruiken van) de code tags :).
 
Vanuit excel zou je het zo kunnen doen:
Code:
Option Explicit
Const Pad = "C:\Users\Public\Documents\Wd\"

Sub tsh()
    Dim Br
    Dim i As Long
    
    Br = Sheets("Lijst artikelen").Cells(1).CurrentRegion
    With CreateObject("Word.Application")
        For i = 2 To UBound(Br)
            Application.StatusBar = "document " & i - 1 & " van " & UBound(Br) - 1 & " wordt gemaakt."
            With .Documents.Add
                .Parent.Selection.TypeText Text:=Br(i, 2)
                .SaveAs Pad & Br(i, 1) & ".docx"
                .Close
            End With
        Next
        .Quit
    End With
    Application.StatusBar = False
End Sub

De constante "Pad" is de map waarin de wordbestanden worden opgeslagen. Dat moet je aanpassen naar je eigen situatie.
Er wordt voor iedere rij uit je excelbestand een nieuw wordbestand gemaakt, waarin de tekst uit kolom 2 wordt gezet, dat vervolgens wordt opgeslagen onder een naam die is afgeleid uit kolom 1.
 
Laatst bewerkt:
Thanks!!

Perfect! Het is nu bezig. Duurt wel 20min. denk ik.
Maar.. nu is er alleen de info uit kolom 2. Hoe krijg ik de info van alle 22 kolommen?
De 2 aanpassen naar 22?:d

Tevens vraag ik me af; wanneer ik nu info in een cel aanpas, moet ik dan de
complete macro draaien om deze info door te voeren naar de word bestanden?
 
Ik tel 31 kolommen (tot en met AE). Om die allemaal mee te nemen kun je de code zo aanpassen:
Code:
Option Explicit
Public Const Pad = "C:\Users\Public\Documents\Wd\"

Sub tsh()
    Dim Br
    Dim i As Long, j As Long
    
    Br = Sheets("Lijst artikelen").Cells(1).CurrentRegion
    With CreateObject("Word.Application")
        For i = 2 To UBound(Br)
            Application.StatusBar = "document " & i - 1 & " van " & UBound(Br) - 1 & " wordt gemaakt."
            With .Documents.Add
                .Parent.Selection.TypeText Join(Application.Index(Br, i, [[COLOR="#FF0000"]column(A:AE)[/COLOR]]), vbCrLf)
                .SaveAs Pad & Br(i, 1) & ".docx"
                .Close
            End With
        Next
        .Quit
    End With
    Application.StatusBar = False
End Sub

Voor het maken van een enkelvoudig wordbestand na update kun je een dubbelklik-event gebruiken. Plaats daartoe onderstaande code in de module van het werkblad:
Code:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim i As Long
    
    If Intersect(Target, Cells(1).CurrentRegion) Is Nothing Or Target.Row = 1 Then Exit Sub
    Cancel = True
    i = Target.Row
    With CreateObject("Word.Application")
        With .Documents.Add
            .Parent.Selection.TypeText Join(Application.Transpose(Application.Transpose(Range("A" & i & ":AE" & i))), vbCrLf)
            .SaveAs Pad & Cells(i, 1) & ".docx"
            .Close
        End With
        .Quit
        MsgBox "File aangemaakt."
    End With
End Sub
...waarna je een nieuw wordbestand aanmaakt door te dubbelklikken op een willekeurige cel uit de betreffende rij.
 

Bijlagen

  • TEST_05082015.xlsm
    34,3 KB · Weergaven: 20
Graag gedaan.
Wil je de vraag nog op opgelost zetten?
 
Voor het maken van een enkelvoudig wordbestand na update kun je een dubbelklik-event gebruiken. Plaats daartoe onderstaande code in de module van het werkblad:
Code:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim i As Long
    
    If Intersect(Target, Cells(1).CurrentRegion) Is Nothing Or Target.Row = 1 Then Exit Sub
    Cancel = True
    i = Target.Row
    With CreateObject("Word.Application")
        With .Documents.Add
            .Parent.Selection.TypeText Join(Application.Transpose(Application.Transpose(Range("A" & i & ":AE" & i))), vbCrLf)
            .SaveAs Pad & Cells(i, 1) & ".docx"
            .Close
        End With
        .Quit
        MsgBox "File aangemaakt."
    End With
End Sub
...waarna je een nieuw wordbestand aanmaakt door te dubbelklikken op een willekeurige cel uit de betreffende rij.[/QUOTE]


Beste Timshell, die laatste macro als knop toegevoegd in Word. Bij dubbelklik zie ik 1 sec. een zandloper.
Maar het doet verder niets. Er staat in deze codering ook geen path, dus hoe 'weet' Excel in welk Wordbestand het gewijzigd moet worden?
 
In post #7 staat ook het voorbeeldbestand nog eens. Heb je het daarmee al getest?
De macro moet niet met een knop gemaakt worden. Als de code in een werkbladmodule staat kun je dubbelklikken op een willekeurige cel etc...
Er wordt niet geschreven naar bestaande wordbestanden. Als het wordbestand al bestaat wordt het overschreven.
De code verwijst naar de constante 'Pad' die als het goed is in de gewone module staat gedeclareerd.
Nogmaals: check dat voorbeeld.
 
Laatst bewerkt:
Excuus?

Ik zie het voorbeeldbestand nu. Eerst niet, alles stond in de war op deze pagina.

Printscreen06082015.jpg
Ik krijg deze melding wanneer ik de code invoer.
 
Laatst bewerkt:
De eerste code komt in een gewone module. De tweede code (Worksheet_BeforeDoubleClick) komt in de werkbladmodule van sheet "Lijst artikelen". Hieronder nog eens het voorbeeldbestand.
 

Bijlagen

  • TEST_05082015.xlsm
    34,3 KB · Weergaven: 17
Dank!

Helemaal goed. Mijn eerste ervaring met modules e.d.

Alles werkt perfect! Super.

Nog beter; elke wijziging brengt Excel aan in de reeds bestaande Word documenten.

Nogmaals hartelijk dank!!!

Elia:d
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan