Word Macro to Format Tables

R

Rage

Hi gang,

I have a 300-odd MS Word Document (Word Version 2003) with quite a lot of
tables, and I was wondering - can someone possibly provide me with a macro
which will take all the tables in a range (e.g.) pages 100 - 200, and set the
width of each column to a specific value (e.g.) column 1 = 10 cm, column 2 =
20 cm etc.?

All the tables in the range needed have 4 columns, but each column needs to
be a different value to the others.

Thanks in advance,

Rage.
 
D

Doug Robbins - Word MVP

Use:

Dim i As Long
Dim myTable As Table
Dim myrange As Range
With ActiveDocument
For i = 1 To .Tables.Count
Set myTable = .Tables(i)
With myTable
Set myrange = .Range
Select Case myrange.Information(wdActiveEndPageNumber)
Case Is > 99 < 201
.AutoFitBehavior wdAutoFitFixed
.Columns(1).Width = CentimetersToPoints(10)
.Columns(2).Width = CentimetersToPoints(2)
'.Columns(3).Width = CentimetersToPoints(#)
'.Columns(4).Width = CentimetersToPoints(#)
End Select
End With
Next i
End With


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
 
R

Rage

Hi Doug,

Thanks for your reply! There's only one thing wrong:

I get a:

Run-time error '5941':

The requested member of the collection does not exist.

at the line:
.Columns(3).Width = CentimetersToPoints(6.37)

(I did take out the apostrophe).

Any ideas?

Cheers.
 
D

Doug Robbins - Word MVP

How many columns are there in your table?

--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
 
R

Rage

4: the four columns are split up into groups of 2, so columns 1 & 4 are the
same size, and columns 2 & 3 are the same size too.

Cheers
 
D

Doug Robbins - Word MVP

So you want to make the total width of the table 60cm. That would exceed
the maximum page width that Word can accommodate which is abot 55.88cm.

There is nothing wrong with the macro as long an you do not have it contain
values that would make the table wider than the maximum page width.

--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
 
R

Rage

It's no where near 60cm - that's huge - the first and last columns are 1.78
cm long, and the 2nd and 3rd columns are 6.37 cm long, giving a total of 16.3
cm for the table width (which is the same width as my A4 word document not
including margins)...
 
R

Rage

I found out where your macro is going wrong: it's not pointing at the range
of tables, it's just going from table 1, which, in my document, only has 2
columns - do you know of a way to adapt the macro so that it doesn't look for
the nth table, but looks for the 1st table starting at a specific page, and
culminating at the last table on another specific page?
 
R

Rage

In fact - scratch that - I've worked it out.

If anyone cares about this, the working macro is this:

Sub ChangeTableSize()
Dim i As Long
Dim myTable As Table
Dim myrange As Range
For i = 1 To ActiveDocument.Tables.Count
Set myTable = ActiveDocument.Tables(i)
Set myrange = myTable.Range
If (myrange.Information(wdActiveEndPageNumber) > 35) And
(myrange.Information(wdActiveEndPageNumber) < 296) Then
myTable.AutoFitBehavior wdAutoFitFixed
myTable.Columns(1).Width = CentimetersToPoints(1.78)
myTable.Columns(2).Width = CentimetersToPoints(6.37)
myTable.Columns(3).Width = CentimetersToPoints(6.37)
myTable.Columns(4).Width = CentimetersToPoints(1.78)
End If
Next i
End Sub
 
D

Doug Robbins - Word MVP

The following code works fine for me:

Dim i As Long
Dim myTable As Table
Dim myrange As Range
With ActiveDocument
For i = 1 To .Tables.Count
Set myTable = .Tables(i)
With myTable
Set myrange = .Range
Select Case myrange.Information(wdActiveEndPageNumber)
Case Is > 99 < 201
.AutoFitBehavior wdAutoFitFixed
.Columns(1).Width = CentimetersToPoints(1.78)
.Columns(2).Width = CentimetersToPoints(6.37)
.Columns(3).Width = CentimetersToPoints(6.37)
.Columns(4).Width = CentimetersToPoints(1.78)
End Select
End With
Next i
End With


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
 
D

Doug Robbins - Word MVP

Sorry, I should have realised that the Select Case was not working as I was
only using it on a one page document.

Dim i As Long
Dim myTable As Table
Dim myrange As Range
Dim pagenum As Long
With ActiveDocument
For i = 1 To .Tables.Count
Set myTable = .Tables(i)
With myTable
Set myrange = .Range
pagenum = myrange.Information(wdActiveEndPageNumber)
If pagenum > 99 And pagenum < 201 Then
.AutoFitBehavior wdAutoFitFixed
.Columns(1).Width = CentimetersToPoints(1.78)
.Columns(2).Width = CentimetersToPoints(6.37)
.Columns(3).Width = CentimetersToPoints(6.37)
.Columns(4).Width = CentimetersToPoints(1.78)
End If
End With
Next i
End With

--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top