Hoi Allen,
Ik wil graag vanuit excel (op basis van ingevulde waarde) een word document genereren.
Dit wil ik compleet met headings en table of content doen.
dus bijvoorbeeld:
<voorbeeld>
Title
1. chapter 1
1.1 paragraph
1.2 paragraph
2. chapter 2
2.1 paragraph
2.2 paragraph
</voorbeeld>
Is dit mogelijk?
Groet,
piros
Nee
Even nuanceren. Het kan in principe prima. Je kunt zelfs een volledig word document maken via vbscripting mocht je dat echt willen.
De vraag is echter dan, waarom genereren vanuit excel? En waarom gaat dit tijd besparen tov een normaal template?
"Ik geloof niet in een limiet van mijn kunnen,
wel van mijn kennis"
OK, ik leer graag.
Hoe maak je een Word-document vanuit Excel?
Ik moet toelichten waarom iets niet kan?
OK:
er is geen mogelijkheid om bij "opslaan als" te kiezen voor .doc
er is geen optie om te exporteren naar Word.doc
Volgens mij kan ik vanuit excel gewoon een word document maken:
Ik zou dit graag willen vanuit excel omdat in excel ik een calculatie maak. door middel van een knop kan ik ook een offerte maken in Word.Code:Sub CreateNewWordDoc() ' to test this code, paste it into an Excel module ' add a reference to the Word-library ' create a new folder named C:\Foldername or edit the filnames in the code Dim wrdApp As Word.Application Dim wrdDoc As Word.Document Dim i As Integer Set wrdApp = CreateObject("Word.Application") wrdApp.Visible = True Set wrdDoc = wrdApp.Documents.Add ' or 'Set wrdDoc = wrdApp.Documents.Open("C:\Foldername\Filename.doc") ' sample word operations With wrdDoc For i = 1 To 100 .Content.InsertAfter "Here is a sample test line #" & i .Content.InsertParagraphAfter Next i If Dir("C:\Foldername\MyNewWordDoc.doc") <> "" Then Kill "C:\Foldername\MyNewWordDoc.doc" End If .SaveAs ("C:\Foldername\MyNewWordDoc.doc") .Close ' close the document End With wrdApp.Quit ' close the Word application Set wrdDoc = Nothing Set wrdApp = Nothing End Sub
De opmaak/inhoud van de offerte is afhankelijk van de keuzes die ik maak in excel.
Zelfs dan is het vaak beter om zoveel mogelijk met vaste templates te werken. Het bespaard ontzettend veel werk tov puur VBA. Standaard lettertype, opmaak, lege index, etc.
Het is bijvoorbeeld veel eenvoudiger een lege index met een "update" zichzelf automatisch te laten bouwen dan de index invoegen met VBA. Word is qua automatisering het meest vervelend, omdat je geen vaste referentiepunten hebt en letterlijk elk teken tientallen eigenschappen kan hebben.
Templates maken en dan zoveel mogelijk knippen en plakken. Eventueel reference points of variables aanbrengen om eenvoudig de data vanuit excel op de juiste locatie te zetten.
"Ik geloof niet in een limiet van mijn kunnen,
wel van mijn kennis"
Een Worddocument aanmaken via VB-code is in mijn ogen niet zelfde als een Worddocument maken vanuit Excel.
Maar da's een definitie-kwestie.
Vraag: Kan ik met een fiets hetzelfde als met een motor?
Antw: Ja, maar dan moet je er een hulpmotor opzetten. (dan is het geen fiets meer)
Als ik gebruik maak van een template. Hoe moet ik dan extra chapters toevoegen? het aantal hiervan is afhankelijk van de keuze die gemaakt wordt.
Daarom zou ik blij zijn met een voorbeeldje hoe dit te doen in VBA (vanuit excel).
Het toevoegen van tekstblokken (op basis van de keuzes in Excel) en genereren van een word document is al klaar. het enige waar ik nog tegen aanloop is de opmaak (Kopteksten en inhoudsopgave)
Bijvoorbaat dank.
Laatst aangepast door piros : 16 maart 2012 om 07:34
Maak een masterdocument in Word met een index (inhoudsupgave) en de koptekst. Indien de koptekst dynamisch moet zijn plaats dan unieke tekens op de plaatsen waar die moeten komen. Maak ook een nieuwe sectie in de master.
Vervolgens alles plakken in de nieuwe sectie, de inhoudsopgave een refresh opdracht geven en een search en replace doen op de plekken waar dat nodig is. Met vba later een sectie toevoegen en een inhoudsopgave maken is redelijk lastig.
Om de inhoudsopgave te kunnen maken moeten hoofdstukken en paragrafen liefst wel zijn voorzien van een "header". Daarna is het redelijk eenvoudig.
"Ik geloof niet in een limiet van mijn kunnen,
wel van mijn kennis"
Waarvoor gebruik je in dit geval Excel ?
VBA voor smarties
Application.SheetsInNewWorkbook = 1
Vermijd Select en Activate in VBA-code
Gebruik in VBA-code With ... End With in plaats van objectvariabelen
@Wampier: Is het ook mogelijk om standaard teksten (inclusief headers) (per tekstblok een apart document) in een word document te zetten. En dan het masterdocument telkens aan te vullen met een kopie van de standaard teksten. (misschien ***lig geformuleerd maar door middel van knippen uit het ene word document naar het plakken in het ander document. Het lijkt mij dan mogelijk om hoofdstukken toe te voegen die daarna in de inhoudsopgave terug komen via een refresh).
@snb: Excel wordt gebruikt om een mogelijke configuratie van een product samen te stellen waaraan gelijk een kosten calculatie aanvast zit. Het zou mooi zijn als er dan ook (op basis van de gekozen flexibele configuratie) een bijbehorende offerte tekst gegenereerd kan worden.
Je kunt vanuit Word gewoon Excel gebruiken (net zoals zoals je vanuit Excel Word kunt gebruiken)
VBA voor smarties
Application.SheetsInNewWorkbook = 1
Vermijd Select en Activate in VBA-code
Gebruik in VBA-code With ... End With in plaats van objectvariabelen
Je kunt inderdaad gewoon knippen en plakken. Zolang de originele documenten de juiste headers bevatten kun je na kopieeren de inhoudsopgave verversen en zouden de hoofdstukken de juiste nummering moeten krijgen.
"Ik geloof niet in een limiet van mijn kunnen,
wel van mijn kennis"
Heeft iemand een voorbeeldje hoe dat moet in VBA van EXCEL? Dan zou ik erg geholpen zijn.