17. december 2009 - 15:16Der er
5 kommentarer og 1 løsning
Indsætte tabel i Word?
Hej folkens
Jeg har ledt overalt efter en metode, hvormed jeg kan indsætte en tabel et bestemt sted i Word - stedet er defineret som et word.range (woRng As Word.Range), men kunne måske erstattes med et bogmærke - men har ikke kunnet finde et eksempel, der gjorde brug af dette.
Det tætteste jeg er kommet på en løsning er nedenstående kode:
------------------------------------------------------------------------------------- Sub ScratchMacro() Dim y As Single Dim oTbl As Word.Table Dim oRng As Word.Range Dim i As Long 'Loop 10 times For i = 1 To 10 'Set range to TableIP range Set oRng = ActiveDocument.Bookmarks("TableIP").Range 'Move the range up one paragraph so you don't interfere with the bookmark oRng.Move wdParagraph, -1 'Select the range oRng.Select 'find the vertical poistion of the selection in points y = Selection.Information(wdVerticalPositionRelativeToPage) 'evaluate that postion and proceed accordingly If y / 72 < 8 Then 'The less than value would depend on how many rows you expect your table will have 'Add a paragraph to prevent tables from being connected together. oRng.InsertBefore vbCr add the table. Set oTbl = ActiveDocument.Tables.Add(Selection.Range, 2, 5) With oTbl 'Do your deed End With Else oRng.InsertBefore vbCr Selection.InsertBreak Type:=wdPageBreak Set oTbl = ActiveDocument.Tables.Add(Selection.Range, 2, 5) With oTbl 'Do your deed End With End If Next i End Sub -------------------------------------------------------------------------------------
Problemet med koden er dog bare, at den opretter en ny tabel hver gang. Jeg har en variabel (tbl As Table), som indeholder en eksisterende tabel, som jeg skal have indsat. Det ville være skønt, hvis det havde været lige så let som at skrive:
Et par opklarende spørgsmål: Det range, woRng, der er defineret som "et bestemt sted i Word" - hvad indeholder det? Den tbl, du vil indsætte, hvor findes den? (i samme dokument?) - hvordan ser den kode ud, hvor du har "set tbl = ..."? Skal tbl indsættes før, efter eller i stedet for wrRng?
Jeg har opmarkeret min dokumentskabelon, hvori tabellen skal indsættes, med bogmærker. ------------------------------------ Dim woRng As Word.Range Dim tbl As Table woRng = myDoc.Bookmarks("Navigation_tabel").Range woRng.Move wdParagraph, -1 woRng.Select woRng.InsertBefore vbCr set tbl = createTbl() ------------------------------------
Dette er en ekstrem kort version af min kode, som burde kunne give indsigt i, at jeg forsøger at indsætte en tabel før "WoRng" og at "woRng" er baseret på bogmærker.
Set tbl = myDoc.Tables(1)
Den "tbl", som jeg forsøger at indsætte, er indlæst i en variabel ud fra en enkelt tabel, der findes i dokumentskabelonen. Tabel-variablen "tbl" manipuleres af forskellige funktioner og til sidst returneres den af funktionen createTbl().
Det er jo altid lidt svært at forholde sig til kode, der er løsrevet helt fra sammenhængen. Der er noget i din kode, som ikke kan være korrekt. Du skal f.eks. bruge "Set" statement foran objekter.
Du burde kunne bruge følgende kode i tilpasset form - jeg har her brugt Copy og Paste. Bemærk, at jeg ikke på noget tidspunkt ændrer Selection - alt er styret med Range. Jeg har ikke viden om din tbl, så her har jeg som eksempel brugt første tabel i dokumentet. Se kommentarerne i koden:
Dim woRng As Word.Range Dim tbl As Table
Set woRng = myDoc.Bookmarks("Navigation_tabel").Range
'Kopier den tabel, der skal indsættes 'Her er brugt første tabel i dokumentet Set tbl = myDoc.Tables(1) tbl.Range.Copy
'Ændr woRng til position før bogmærkets start With woRng .Start = .Start - 1 .Collapse wdCollapseStart 'Indsæt den kopierede tabel .Paste End With
'Ryd op Set tbl = Nothing Set woRng = Nothing
Generelt er jeg meget tilbageholdende med at sætte min lid til bogmærker i VBA-kode. Det er meget let for en bruger at komme til at slette et bogmærke.
Jeg har gjort brug af dit forslag og tror at det virker. Desværre kan jeg ikke være 100 % sikker, da en anden del af min kode pt. driller. Først når den fejl er rettet, vil jeg kunne sige med sikkerhed, om det virker.
Som tidligere nævnt var det et forsimplet og lille udpluk af min kode.
Jeg er helt enig i din betragtning omkring bogmærker, men mener ikke, at det bliver et problem i denne sammenhæng, da bogmærkerne er indsat i en word-skabelon (dotx). Selve koden er en del af en rapportgenereringsfunktion til et excel-regneark (der fungerer som et evalueringsskema). Rapporten genereres med udgangspunkt i word-skabelonen.
Jeg betvivler ikke, at du selvfølgelig har skrevet noget kode, som virker, men om dit forslag løser mit problem kan jeg først med sikkerhed vide, når jeg får fikset de sidste løse ender.
Du får selvfølgelig point, så snart jeg får det endeligt bekræftet.
Indtil da skal du i hvertfald have tak for din tid og hjælp.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.