Avatar billede aitnemed Novice
17. december 2009 - 15:16 Der 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:

woRng.InsertBefore tbl

Nogen der ved hvordan, jeg kan gøre det?
Avatar billede Lene Fredborg Ekspert
17. december 2009 - 15:31 #1
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?
Avatar billede aitnemed Novice
17. december 2009 - 15:55 #2
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().
Avatar billede Lene Fredborg Ekspert
17. december 2009 - 17:05 #3
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.
Avatar billede aitnemed Novice
18. december 2009 - 12:05 #4
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.
Avatar billede Lene Fredborg Ekspert
18. december 2009 - 12:20 #5
Koden i sig selv virker...
Men om der af andre grunde skal ændres noget i din sammenhæng, kan jeg ikke vide.
Avatar billede aitnemed Novice
18. december 2009 - 13:05 #6
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester