Opmaak Word aansturen vanuit Excel

Status
Niet open voor verdere reacties.

jofred

Gebruiker
Lid geworden
16 dec 2006
Berichten
172
Ik wil met gegevens uit een Excel-werkblad een Word document opbouwen. Hiervoor heb ik een stuk vba-code in elkaar gezet, dat op zich prima werkt. Ik ben alleen nog niet zo tevreden over de opmaak. Zo zou ik graag bij de tweede tabel de opmaak willen hebben met lettertype Times New Roman, 9 punten en de eerste rij vetgedrukt.

Kan iemand mij daarmee verder helpen ?



Sub Nieuw_document()
Dim wrdRange, wrdTable

Pad = ThisWorkbook.Path

'We creëren een nieuw object in Word en maken Word
' zichtbaar. We tonen Word in een maximumvenster.
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
objWord.WindowState = wdwindowstatemaximize

'We openen het bestand budgetverslag.doc
objWord.changefileopendirectory Pad
Set objDocument = objWord.Documents.Add

With objDocument.Content
.InsertAfter "Budgetverantwoording " & Range("boekjaar")
.InsertParagraphAfter
.InsertParagraphAfter
End With

'Tabel aanmaken van 3 kolommen en 4 rijen aan het einde van het bestaande document
Set wrdRange = objDocument.Content
wrdRange.Collapse Direction:=wdCollapseEnd
Set wrdTable = objDocument.Tables.Add(wrdRange, 4, 3)
wrdTable.Columns(1).Width = 22
wrdTable.Columns(2).Width = 200
wrdTable.Columns(3).Width = 250

wrdTable.Cell(1, 1) = "1"
wrdTable.Cell(2, 1) = "2a"
wrdTable.Cell(3, 1) = "2b"
wrdTable.Cell(4, 1) = "2c"

wrdTable.Cell(1, 2) = "Afdeling"
wrdTable.Cell(2, 2) = "Programma"
wrdTable.Cell(3, 2) = "Functie"
wrdTable.Cell(4, 2) = "Clustering budgetten (sub-functie)"

wrdTable.Cell(1, 3) = Afdeling
wrdTable.Cell(2, 3) = Programma
wrdTable.Cell(3, 3) = Functie
wrdTable.Cell(4, 3) = Sub_functie

With objDocument.Content
.InsertParagraphAfter
.InsertAfter "Cijfermateriaal"
.InsertParagraphAfter
End With

De tweede tabel aanmaken

Set wrdRange = objDocument.Content
wrdRange.Collapse Direction:=wdCollapseEnd
Set wrdTable = objDocument.Tables.Add(wrdRange, 1, 6)
wrdTable.Cell(1, 1) = "Budget"
wrdTable.Cell(1, 2) = "Verantwoordelijke"
wrdTable.Cell(1, 3) = "Kostensoort"
wrdTable.Cell(1, 4) = "Budget bedrag"
wrdTable.Cell(1, 5) = "Realisatie bedrag"
wrdTable.Cell(1, 6) = "Verschil"

'wrdTable.Columns(1).Width = 146
'wrdTable.Columns(2).Width = 76
'wrdTable.Columns(3).Width = 67
'wrdTable.Columns(4).Width = 63
'wrdTable.Columns(5).Width = 72
'wrdTable.Columns(6).Width = 54
Set wrdTable = Nothing
Set wrdRange = Nothing

End Sub

 
Word vanuit Excel

Wat dacht je hiervan?

' De tweede tabel aanmaken

Set wrdRange = objDocument.Content
wrdRange.Collapse Direction:=wdCollapseEnd
Set wrdTable = objDocument.Tables.Add(wrdRange, 1, 6)
With wrdTable
.Select
Selection.Font.Name = "Times New Roman"
Selection.Font.Size = 9
.Rows(1).Select
Selection.Font.Bold = True
.Cell(1, 1) = "Budget"
.Cell(1, 2) = "Verantwoordelijke"
.Cell(1, 3) = "Kostensoort"
.Cell(1, 4) = "Budget bedrag"
.Cell(1, 5) = "Realisatie bedrag"
.Cell(1, 6) = "Verschil"
End With
 
De code ziet er logisch uit en je zou denken dat het werkt. Maar bij het runnen van de code blijft de tekst gewoon in de oude opmaak staan. Als ik de aangepaste code stap-voor-stap uitvoer, zie ik wel dat de eerste rij wordt geselecteerd, maar er verandert niets.
 
Word vanuit Excel

Dag Jofred,

Zie bijlage. En vergeet vooral niet om in Extra – Verwijzingen Microsoft Word aan te vinken.
 

Bijlagen

Axel,

Hartelijk dank voor je suggesties. Ik kon er een heel stuk verder mee.
Ik zit echter nog met een paar vragen:

1) hoe kun je van een deel van de kolommen (in dit geval kolommen 4, 5 en 6 uit de tweede tabel) aangeven dat de opgenomen waarden rechts moeten worden uitgelijnd. Vanuit een hoofdprocedure wordt een de sub-procedure Nieuw_document aangeroepen, waar o.a. de kopregel van de tweede tabel wordt aangemaakt. Daarna wordt via een loop in de hoofdprocedure een wisselend aantal keren de procedure regel_schrijven aangeroepen, om wat getallen etc. weg te schrijven.

Sub Nieuw_document()
Dim i As Integer
Dim s As String

'We creëren een nieuw object in Word en maken Word
'zichtbaar. We tonen Word in een maximumvenster.
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
objWord.WindowState = wdWindowStateMaximize

With objWord
.Documents.Add
With .Selection
.EndKey Unit:=wdStory
[Font.Underline = wdUnderlineSingle
[.TypeText Text:=vbCr & "Cijfermateriaal d.d. " & Range("datumverversing") & vbCr & vbCr
[.Font.Underline = False

'De eerste rij van de tweede tabel aanmaken
.Tables.Add(.Range, 1, 6).Select
.Tables(1).Select
.Font.Name = "Times New Roman"
.Font.Size = 9
.Font.Bold = True
With .Tables(1)
For i = 1 To 6
.Cell(1, i) = Choose(i, "Budget", "Verantwoordelijke", "Kostensoort", "Budget bedrag", "Realisatie bedrag", "Verschil")
Next
End With
End With
End With
End Sub

Sub Regel_schrijven()
Dim i As Integer
With objWord
With .Selection
.EndKey Unit:=wdStory
.Tables.Add(.Range, 1, 6).Select
.Font.Name = "Times New Roman"
.Font.Size = 9
With .Tables(1)
For i = 1 To 6
.Cell(Regelnr + 1, i) = Choose(i, Budget, Verantwoordelijke, Kostensoort, Format(Bud_bedr, "#,##0") _
, Format(Real_bedr, "#,##0"), Format(Versch_bedr, "#,##0"))
Next
End With
End With
End With

End Sub


2) De aanroep van de code voor het aanpassen van de breedte van de kolommen bij een 3e tabel door de code

.Columns(i).PreferredWidthType = wdPreferredWidthPoints
.Columns(i).PreferredWidth = CentimetersToPoints(Choose(i, 0.78, 7.05, 8.82))


veroorzaakt bij het aanmaken van het tweede rapport bij het aanpassen van de breedte in de tweede tabel een fout met nr 462 De externe servercomputer bestaat niet of is niet beschikbaar

Als ik bovenstaande code vervang door:

.Columns(i).Width = Choose(i, 22, 200, 250)

loopt hij zonder problemen door. Enig idee waardoor dit komt?
 
Word vanuit Excel

Dag Jofred,

Ik heb bij de aanmaak van tabel2 een extra rij toegevoegd en in die rij de vierde, vijfde en zesde kolom rechts uitgelijnd.

Dat de instelling van de breedte van de kolommen niet goed werkt kan worden veroorzaakt dat de versie van jouw Word anders is dan de mijne. Wordt er wel naar de library van Word verwezen? Extra – Verwijzingen: Microsoft Word Library (in mijn geval versie 9).

Overigens zou je ook een sjabloon kunnen maken waarin alle tabellen geheel zijn opgemaakt voor hun doel. Documents.Add Template:=TabellenSjabloon is dan alles wat je hoeft te programmeren.

Zie verder het nieuwe bestand.
 

Bijlagen

Axel,

Hartelijk dank voor je reactie.
Ik heb nu een werkend geheel (bijgevoegd ter leering ende vermaeck)

Je opmerking over de verwijzingen heb ik nog even nagegaan, maar dat is niet de oorzaak van de fout. Ik had die verwijzijng al aanstaan (en ook bij mij is het versie 9.0)

Je zegt heel terecht dat er ook een mogelijkheid is om een sjabloon aan te maken met de juiste lay-out, maar dan moet je dat ook steeds "meeslepen". Op deze manier ben je wel een stuk flexibeler.
 

Bijlagen

Word vanuit Excel

Ja, het ziet er indrukwekkend uit voor mij. Ik werk namelijk nooit met Excel. Overigens zag ik laatst nog een gemakkelijke manier om de laatste rij te bepalen.

Aantal rijen = ActiveWorkbook.Sheets(1).Cells(1, 1).CurrentRegion.Rows.Count

Succes verder met je project.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan