Avatar billede Falentin Seniormester
17. december 2018 - 14:44 Der er 1 kommentar og
1 løsning

macro til at indsætte samme tabel i Word i VBA

Hej eksperter

Jeg har følgende macro, der kan indsætte en tabel med bestemte ord i kolonne 1 og bestemt antal kolloner og rækker. Det virker også fint med den første tabel. Herefter indsætter den en tabel uden tekst og kanter. Det er højest sandsynligt pga. at koden er kun til den første tabel i word jf "Tables(1)".

Hvordan kan jeg ændre koden, så den indsætter alle oplysninger i en tabel hver gang, og ikke kun referer til den første tabel i Word dokumentet. Til info vil der også være andre tabller, som ser anderledens ud i worddokumentet.


Koden ser sådan ud:

Sub InsertTeroiModul()

'Denne virker ved førstetabel

Dim wdApp As Word.Application
Set wdApp = GetObject(, "Word.Application")

Dim rng As Word.Range
Set rng = wdApp.Selection.Range


ActiveDocument.Tables.Add Range:=rng, Numrows:=8, NumColumns:=2
  ActiveDocument.Tables(1).Cell(1, 1).Range.Text = "Teori"
  ActiveDocument.Tables(1).Cell(2, 1).Range.Text = "Hvem"
  ActiveDocument.Tables(1).Cell(3, 1).Range.Text = "Hvorn?r"
  ActiveDocument.Tables(1).Cell(4, 1).Range.Text = "Begreber"
  ActiveDocument.Tables(1).Cell(5, 1).Range.Text = "Keywords"
  ActiveDocument.Tables(1).Cell(6, 1).Range.Text = "Retning"
  ActiveDocument.Tables(1).Cell(7, 1).Range.Text = "Kritik"
  ActiveDocument.Tables(1).Cell(8, 1).Range.Text = "Opgave"
   
   
   
    With ActiveDocument.Tables(1)
        .Borders(wdBorderTop).LineStyle = wdLineStyleSingle
        .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
        .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
        .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
        .Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
        .Borders(wdBorderVertical).LineStyle = wdLineStyleSingle
    End With



      For Each Table In ActiveDocument.Tables
    On Error Resume Next
    Table.Columns(1).Width = 60
    Table.Columns(2).Width = 400
    On Error GoTo 0
  Next

End Sub
Avatar billede Lene Fredborg Ekspert
17. december 2018 - 15:25 #1
Prøv nedenstående version i stedet. Jeg har oprettet et tabelobjekt, oTable, som bliver indsat der, hvor du har defineret rng (selection) – og så er det oTable, jeg ændrer på.

Bemærk, at jeg også har brugt With/End With, så der kun refereres til samme objekt én gang. Det er mere effektiv kode.

Du havde brugt ”Table” i sidste del, hvor kolonnebredder ændres. ”Table” er ikke erklæret som variabel (og det er måske derfor, du har sat ”On Error Resume Next” omkring? Jeg har brugt oTable is stedet.

    Dim wdApp As Word.Application
    Set wdApp = GetObject(, "Word.Application")
   
    Dim rng As Word.Range
    Dim oTable As Word.Table
   
    Set rng = wdApp.Selection.Range
   
    'insert table at rng
    Set oTable = rng.Tables.Add(Range:=rng, Numrows:=8, NumColumns:=2)
    With oTable
        .Cell(1, 1).Range.Text = "Teori"
        .Cell(2, 1).Range.Text = "Hvem"
        .Cell(3, 1).Range.Text = "Hvornår"
        .Cell(4, 1).Range.Text = "Begreber"
        .Cell(5, 1).Range.Text = "Keywords"
        .Cell(6, 1).Range.Text = "Retning"
        .Cell(7, 1).Range.Text = "Kritik"
        .Cell(8, 1).Range.Text = "Opgave"
       
        .Borders(wdBorderTop).LineStyle = wdLineStyleSingle
        .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
        .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
        .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
        .Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
        .Borders(wdBorderVertical).LineStyle = wdLineStyleSingle
    End With
   
    For Each oTable In ActiveDocument.Tables
        On Error Resume Next
        With oTable
            .Columns(1).Width = 60
            .Columns(2).Width = 400
        End With
        On Error GoTo 0
    Next oTable

    'clean up
    Set oTable = Nothing
    Set rng = Nothing
End Sub
Avatar billede Falentin Seniormester
17. december 2018 - 15:35 #2
Mange tak, det var lige dét, der skulle til :-)
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