Format Excel tabellen in Word

Status
Niet open voor verdere reacties.

Symphysodon

Gebruiker
Lid geworden
14 dec 2012
Berichten
468
Beste forummers,

Ik sta voor een uitdaging. Stel je hebt een rapport met honderden tabellen, waarvan elke tabel begint met "Tabel" gevolgd door een nummer en een titel. De tabellen komen uit Excel en staan met twee regels gescheiden van elkaar. Hierdoor komt het voor dat sommige tabellen niet op 1 pagina meer passen.

Wat ik nu graag zou willen is dat op het moment dat het gebeurt dat een tabel onderbroken wordt, de gehele tabel op de volgende pagina geplaatst wordt, of dat alleen de tabeltitel met tabelkoppen (2 regels) boven het onderbroken gedeelte op de volgende pagina wordt gekopieerd. Als bijvoorbeeld onderaan een pagina alleen de eerste regel + koppen en titel zichtbaar is dan is het beter om de gehele tabel op de volgende pagina te zetten en vice versa.

In de bijlage staat al een stukje code om er een mooie Word tabel van te maken. De code is niet helemaal zoals ik het wil omdat ik eerst een selectie moet maken van de tabellen voordat de tabel aangepast wordt. Het mooiste zou zijn dat de code de tabel herkent en dan aan de slag gaat.

In dat stukje code wou ik ook iets maken dat de kolommen gelijkmatig verdeeld, maar dat werkt niet omdat er samengevoegde cellen in staan. Als het mogelijk is moeten de kolommen waar geen samengevoegde cellen in staan gelijkmatig verdeeld worden.

Code:
Sub Tabelopmaak_in_Word()
'Programma format tabellen

'Selection.Cells.DistributeWidth
    
 With Selection.ParagraphFormat
     .SpaceBefore = 4
     .SpaceAfter = 2
 End With

 Selection.Tables(1).AutoFitBehavior (wdAutoFitWindow)
 Selection.Tables(1).AutoFitBehavior (wdAutoFitWindow)
    
End Sub


In de bijlage een voorbeeld bestand. Het is zonder macro. Het is blijkbaar niet mogelijk een docm-bestand toe te voegen

Veel vragen, vba Excel is al moeilijk, maar Word lijkt nog veel lastiger.

Bekijk bijlage Format_tabellen2.docx

Mvg
Marco
 
Laatst bewerkt:
Check of docm bestanden geplaatst kunnen worden.
 

Bijlagen

  • __Bookmarks on Range.docm
    45,1 KB · Weergaven: 57
Met de eigenschappen van de alinea's kun je instellen dat alinea's bij elkaar moeten worden gehouden.
Zie de bijlage

Als je samengevoegde cellen gebruikt valt Word niets te verwijten.
 

Bijlagen

  • __Format_tabellen snb.docx
    23,8 KB · Weergaven: 56
Laatst bewerkt:
Ik begrijp niet wat je bedoelt met die bookmarkpagina. Bij geldige bestandsextensies staat dat je wel docm bestanden kan toevoegen?

Alinea's bijeenhouden lukt wel als je de desbetreffende tabel selecteert en de bedoeling is juist dat het automatisch gedaan wordt omdat het vaak over megabestanden gaat met honderden tabellen.

Als cellen samenvoegen een optie is in Word dan moet toch kunnen om met vba kolommen gelijkmatig te verdelen? Rekenkundig is dat wel te doen. Als je van een selectie het maximaal aantal kolommen telt en die gelijkmatig verdeeld, dan ben je er toch al.

[smallimg]H:\Word\VBA\knipsel.JPG[/smallimg]
 

Bijlagen

  • Format_tabellen.docm
    21,7 KB · Weergaven: 61
Laatst bewerkt:
Zullen we eens beginnen met het opknappen (jouw taak, uiteraard ;) ) van je brondocument? Je hebt het in je initiële vraag over
een rapport met honderden tabellen, waarvan elke tabel begint met "Tabel" gevolgd door een nummer en een titel. De tabellen komen uit Excel en staan met twee regels gescheiden van elkaar. Hierdoor komt het voor dat sommige tabellen niet op 1 pagina meer passen.
Maar je hébt niet 'honderden' (of een paar, zoals in je voorbeeld) tabellen, maar één tabel. Alle 'tabellen' zitten namelijk in één tabel verwerkt. Wat jij met 'twee regels gescheiden van elkaar' gescheiden' noemt, is dat niet: er zitten lege rijen tussen, maar geen lege regels (waar je dan vermoedelijk alinea's mee bedoelt).

Kortom: de macro die je normaal gesproken zou maken voor dit soort situaties (een loop die door alle tabellen loopt) kun je niet maken als er maar één tabel is.
 
Ja dat klopt, ik heb op dit moment een rapport met 529 Excel tabellen. De tabellen zijn in dit geval verdeeld over 4 tabbladen en worden in 4 keer gekopieerd en geplakt in Word.
In het voorbeeld zitten inderdaad maar een aantal tabellen die in 1 keer gekopieerd en geplakt zijn. Dus 1 tabel met een x-tal Excel tabellen gescheiden door steeds 2 lege rijen.
 
Maar dan heb je dus technisch gezien één tabel, of in jouw geval 4 als je er 4 plakt. En afstand houdt :). En zoals je vast wel weet, kun je van een tabel een aantal rijen als koprij vastzetten zodat ze op elke pagina terugkomen, maar dat is in jouw geval dus een waardeloze optie, omdat je maar 1 tabel hebt. Dus wat wil je precies? Moeten de tabellen in de macro ook nog gescheiden worden? En wat moet er dan gebeuren met die overtollige lege rijen die dan als blindedarmpjes aan de tabellen blijven kleven?
 
Ik had eigenlijk gehoopt dat in die ene x tabel gezocht kon worden naar het woord 'Tabel', vervolgens het kader (rand) van de exceltabel herkent en dan op basis van het aantal rijen binnen de buitenrand besluit of de gehele tabel op een volgende pagina komt of dat alleen de koprij vastgezet wordt en de tabel doorloopt op de volgende pagina.

Nu zet ik de koprij vast en doorloop het gehele document en als ik dan een tabel zie met bijvoorbeeld alleen een titel en een koprij, zet ik met Ctr+Enter de gehele tabel op de volgende pagina.

Of is het mogelijk om in Excel de macro te maken: kopiëren (per tabel) in Excel en plakken in Word op een aangegeven positie. In Excel zijn het vaak maar drie of vier soorten tabellen die allemaal op gelijke afstand onder mekaar staan.
 
Bekijk bijlage Wordexport.docxZoiets:

Code:
Sub WOrd_export()
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document

Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
 
For Each ws In Worksheets
    With Sheets(ws.Name)
        s = Left(ws.Name, 1)
        If s = "V" Then
            ws.Activate
            Set wrdDoc = wrdApp.Documents.Open("H:\Excel\VBA\vragen aan forum\Wordexport.docx")
            For sR = 5 To 879 Step 34
               Range(Cells(sR, 31), Cells(sR + 31, 36)).Copy
               
               With wrdDoc
                  .Content.PasteExcelTable False, False, False
               End With
            Next
        
        End If
    End With
Next
wrdDoc.Close
wrdApp.Quit

End Sub

Nu nog een manier om de tabel op een bepaalde positie in Word te plakken. Het werkt alleen voor de 1e tabel


Bekijk bijlage Wordexport.docx
 

Bijlagen

  • Wordexport.xlsm
    111,8 KB · Weergaven: 68
Laatst bewerkt:
Ik heb een poging gedaan om het werkend te krijgen. Het is helaas nog niet gelukt
Code:
Sub WOrd_export()
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document

On Error Resume Next

Set wrdApp = GetObject(, "Word.Application")
If Err Then
    Set wrdApp = New Word.Application
    WordWasNotRunning = True
End If

wrdApp.Visible = True
 
For Each ws In Worksheets
    With Sheets(ws.Name)
        s = Left(ws.Name, 1)
        If s = "V" Then
            ws.Activate
            Set wrdDoc = wrdApp.Documents.Open("H:\Wordexport.docx")

            ActiveDocument.Content.Select
            
            For sR = 5 To 879 Step 34
               Range(Cells(sR, 31), Cells(sR + 31, 36)).Copy
               
               With wrdDoc
                  
                    With Word.Selection.Find
                        .ClearFormatting
                        .Text = "Tabel"
                    End With
    
                   If Word.Selection.Find.Execute Then
                    Word.Selection.Select
                    Word.Selection.Goto What:=wdGoToLine, Which:=wdGoToNext, Count:=36
                    Word.Selection = ""
                    
                    .Content.PasteExcelTable False, False, False
                   End If
               End With
            Next
        
        End If
    End With
Next
wrdDoc.Close
wrdApp.Quit

End Sub

Het woord: Tabel, wordt wel herkend en geselecteerd. Het lukt ook om dan naar een bepaalde regel in Word te gaan, alleen het plakken van de excelgegevens op die plek lukt dan niet.
 
Ik zal er eens naar kijken. Ik zie wel wat potentiële problemen in je code.
 
Is er iets fout gegaan met je Excel bestand trouwens? Of gebruik je onzichtbare inkt? :D. Er staat nergens data in; hoe kan de macro dan op zoek gaan naar de tekst "tabel"?
 
Waarschijnlijk is het te lastig, maar als het kan zou ik het wel graag willen oplossen. Ik heb het nu met de hand uitgevoerd en dat heeft me een paar uur gekost. Nu komen dit soort dikke rapporten niet zo vaak voor maar toch wel af en toe, voor mij reden genoeg om het te standaardiseren.
 
Nou, ik heb er naar gekeken en ik krijg de tabel(len) wel overgezet, maar op dezelfde plek. Hij wordt dus steeds overschreven. Het helpt ook niet dat er geen data is, dus je ziet ook niet wat je doet. Overigens blijf ik het een rare manier van werken vinden.
 
Als je een beter idee hebt of een andere manier van werken dan hoor ik dat graag.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan