[VBA] Breedte tabelkolommen instellen in Word 2003 macro

Pagina: 1
Acties:
  • 274 views sinds 30-01-2008
  • Reageer

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 06-05 19:34

Tomatoman

Fulltime prutser

Topicstarter
In VBA heb ik een wizard gebouwd die een Word 2003 document optuigt. Ook een tabel creëren lukt, alleen maakt Word een puinhoop van de kolombreedtes in de tabel. Het is een tabel van 2 kolommen en 1 rij, die ik onderaan het document plaats om de bijlagen op te sommen. De tabel moet 100% breedte krijgen van, de eerste kolom moet 1,8 cm breed worden en de tweede kolom moet de rest van de 100% volmaken.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    ' Set the default table style to tables without borders
    ActiveDocument.SetDefaultTableStyle _
        Style:=WdBuiltinStyle.wdStyleNormalTable, SetInTemplate:=False

    ' Insert table
    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, _
        NumColumns:=2, DefaultTableBehavior:=wdWord9TableBehavior, _
        AutoFitBehavior:=wdAutoFitFixed
    Selection.Tables(1).PreferredWidthType = wdPreferredWidthPercent
    Selection.Tables(1).PreferredWidth = 100
    Selection.Tables(1).Columns(2).PreferredWidthType = wdPreferredWidthAuto
    Selection.Tables(1).Columns(2).PreferredWidth = 0
    Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
    Selection.Tables(1).Columns(1).PreferredWidth = CentimetersToPoints(1.8)
Dit geeft als resultaat:
Afbeeldingslocatie: http://img149.imageshack.us/img149/4805/brieffoutqg9.gif

Hoe ik ook met de kolombreedtes stoei in de code, de linkerkolom wordt altijd breder dan 1,8 cm. Als de macro gereed is, kun je in Word via de tabeleigenschappen zien dat hij wel op 1,8 cm is ingesteld. :? Hoe krijg ik de tabel zoals ik hem wil?

Een goede grap mag vrienden kosten.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Reinier
  • Registratie: Februari 2000
  • Nu online

Reinier

\o/

Helpt het om Width in plaats van PreferredWidth te gebruiken?

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 06-05 19:34

Tomatoman

Fulltime prutser

Topicstarter
Oeps, als PRG die-hard had ik daar even niet bij stilgestaan. :o

Een goede grap mag vrienden kosten.


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 06-05 19:34

Tomatoman

Fulltime prutser

Topicstarter
Ik had al met Width zitten klooien, maar dan wordt de tabel minder dan 100% breed. De eerste kolom krijgt dan wel de juiste breedte, maar de 2e kolom krijg een willekeurige breedte. Als ik daarachteraan nog een tweede keer de breedte van de tabel op 100% instel, ben ik weer terug in de oude situatie met de eerste kolom te breed.

Een goede grap mag vrienden kosten.


Verwijderd

tomatoman schreef op dinsdag 25 juli 2006 @ 11:31:
In VBA heb ik een wizard gebouwd die een Word 2003 document optuigt. Ook een tabel creëren lukt, alleen maakt Word een puinhoop van de kolombreedtes in de tabel. Het is een tabel van 2 kolommen en 1 rij, die ik onderaan het document plaats om de bijlagen op te sommen. De tabel moet 100% breedte krijgen van, de eerste kolom moet 1,8 cm breed worden en de tweede kolom moet de rest van de 100% volmaken.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    ' Set the default table style to tables without borders
    ActiveDocument.SetDefaultTableStyle _
        Style:=WdBuiltinStyle.wdStyleNormalTable, SetInTemplate:=False

    ' Insert table
    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, _
        NumColumns:=2, DefaultTableBehavior:=wdWord9TableBehavior, _
        AutoFitBehavior:=wdAutoFitFixed
    Selection.Tables(1).PreferredWidthType = wdPreferredWidthPercent
    Selection.Tables(1).PreferredWidth = 100
    Selection.Tables(1).Columns(2).PreferredWidthType = wdPreferredWidthAuto
    Selection.Tables(1).Columns(2).PreferredWidth = 0
    Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
    Selection.Tables(1).Columns(1).PreferredWidth = CentimetersToPoints(1.8)
Dit geeft als resultaat:
[afbeelding]

Hoe ik ook met de kolombreedtes stoei in de code, de linkerkolom wordt altijd breder dan 1,8 cm. Als de macro gereed is, kun je in Word via de tabeleigenschappen zien dat hij wel op 1,8 cm is ingesteld. :? Hoe krijg ik de tabel zoals ik hem wil?
programmeren met tabellen in word is een ramp. probeer alvast eens met de DefaultTableBehavior (2003only blijkbaar) te spelen en een lagere compatibiliteit te kiezen als dat mogelijk is (bv. word 97=wdword8 ws). ben je er daarnaast zeker van dat selection.tables(1) de juiste tabel neemt?
mss kun je beter dim MijnTabel as table en dan set mijntabel=activedocument.tables.add(parameters) en verder mijntabel.colums(1). enz... doen.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 06-05 19:34

Tomatoman

Fulltime prutser

Topicstarter
Verwijderd schreef op dinsdag 25 juli 2006 @ 14:24:
[...]


programmeren met tabellen in word is een ramp. probeer alvast eens met de DefaultTableBehavior (2003only blijkbaar) te spelen en een lagere compatibiliteit te kiezen als dat mogelijk is (bv. word 97=wdword8 ws). ben je er daarnaast zeker van dat selection.tables(1) de juiste tabel neemt?
mss kun je beter dim MijnTabel as table en dan set mijntabel=activedocument.tables.add(parameters) en verder mijntabel.colums(1). enz... doen.
Het gebruik van een variabele maakt de code inderdaad wel wat netter. Die DefaultTableBehavior instelling maakt voor het resultaat verder geen verschil.

Na nog een hoop experimenteren heb ik ontdekt dat de volgende code tot het gewenste resultaat leidt:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Dim AppTable As Table

    ' Insert table
    Set AppTable = ActiveDocument.Tables.Add(Range:=Selection.Range, _
        NumRows:=1, NumColumns:=2, _
        DefaultTableBehavior:=wdWord9TableBehavior, _
        AutoFitBehavior:=wdAutoFitFixed)
    
    ' Set the table width to 100% and the width of the first column
    ' to 1.8 cm. The second column fills the remaining width.
    AppTable.PreferredWidthType = wdPreferredWidthPercent
    AppTable.PreferredWidth = 100
    AppTable.Columns.PreferredWidthType = wdPreferredWidthPoints
    AppTable.Columns(1).SetWidth _
        ColumnWidth:=CentimetersToPoints(1.8), _
        RulerStyle:=wdAdjustProportional
Het enige wat nu nog niet klopt is dat de tweede kolom op de resterende breedte (in mijn geval 14,44 cm) staat ingesteld in plaats van op 'geen voorkeursbreedte', maar dat neem ik dan maar voor lief.

Een goede grap mag vrienden kosten.


Verwijderd

voor wat het waard is, je laatste code doet precies wat je wenst in word xp-2002. als je bv. de paginabreedte achteraf aanpast blijft de eerste kolom netjes op 1.8, de tweede kolom gaat mee met de paginabreedte.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 06-05 19:34

Tomatoman

Fulltime prutser

Topicstarter
Verwijderd schreef op dinsdag 25 juli 2006 @ 16:06:
voor wat het waard is, je laatste code doet precies wat je wenst in word xp-2002. als je bv. de paginabreedte achteraf aanpast blijft de eerste kolom netjes op 1.8, de tweede kolom gaat mee met de paginabreedte.
Dat is dan precies zoals bij mij. Het is allemaal nogal duister waarom de eerste poging niet werkte - als je de handelingen in Word uitvoert en daarvan een macro opneemt is het resultaat anders dan wanneer je die macro later nog eens uitvoert. Het lijkt allemaal een beetje buggy.

Een goede grap mag vrienden kosten.

Pagina: 1