#1
|
|||
|
|||
Inserting a Table using VBA
Hi guys...
I have a document on which there is a specific table. I want to copy that table "as is" to another document, but WITHOUT using the clipboard. I can save the table in a variable Dim'd as Word.Table, but I dont know how to insert that table into another document. I can't find an "Activedocument.Tables.Insert" with a table as an operand; all I've found is the "ActiveDocument.Tables.Add", which doesn't seem to have the facility to have a table variable as an operand. I know I could extract the dimensions, formats and contents and use those details to "Add" and then populate the new table, but that's one great lump of coding I'd like to avoid. Surely if I can code Code:
Dim tbl As Word.Table Set tbl = ActiveDocument.Tables(1) Code:
Dim tbl As Word.Table ActiveDocument.Tables.insert(tbl) Can ayone help? |
#2
|
|||
|
|||
Code:
Sub ScratchMacro() 'A basic Word macro coded by Greg Maxey Dim oDoc1 As Document Dim oDoc2 As Document Dim oRng As Range, oRngInsert As Range Set oDoc1 = ActiveDocument 'The one with the table Set oDoc2 = Documents.Add 'Some other document Set oRng = oDoc1.Tables(1).Range Set oRngInsert = oDoc2.Range oRngInsert.Collapse wdCollapseEnd oRngInsert.FormattedText = oRng.FormattedText lbl_Exit: Exit Sub End Sub |
#3
|
|||
|
|||
It works (obviously, it's from Greg).
I would never have worked that out in a month of Sundays. So the first "trick" is to save the table as a Range instead of a Table, and the second is to use the FormattedText attribute. Now I know why I never worked for Microsoft - my mind isn't sufficiently agile (or should that be "warped"?). Thanks again Greg! |
#4
|
|||
|
|||
Well you aren't actually saving the table as a range. The table already defines a range.
A character defines a range, a word defines a range, a paragraph defines a range and yes, a table does too. ;-) Here is an abbreviated version that does the same thing with no declared range variables. Code:
Sub ScratchMacro() 'A basic Word macro coded by Greg Maxey Dim oDoc1 As Document Dim oDoc2 As Document Set oDoc1 = ActiveDocument Set oDoc2 = Documents.Add 'Some other document oDoc1.Activate oDoc2.Range.FormattedText = oDoc1.Tables(1).Range.FormattedText oDoc2.Activate lbl_Exit: Exit Sub End Sub |
#5
|
|||
|
|||
OK, I know this is going a bit "off piste", but presumably, as the entire known (Word) universe is a Range, I suspect that the only reason to have a Dim of Table is to enable us to Set the attributes for each cell all at once: or can that be done in a Range as well?
If there's an Idiots Guide to "Fun Things To Do With Ranges" that you know of (I just bet there's one at The Anchorage!), could you reply with a link? I promise I'll go away then (for a while, at least). Ta! |
#6
|
|||
|
|||
There is a bit here called Learn to Love ranges.
VBA Basics Actual a table is an object (type table). Declaring a variable just makes coding easier. (I'm not formally trained so could be wrong). Code:
Sub ScratchMacro() 'A basic Word macro coded by Greg Maxey Dim oTbl As Object Dim oTbl2 As Table Dim lngIndex As Long For Each oTbl In ActiveDocument.Tables MsgBox TypeName(oTbl) oTbl.Range.Cells(1).Range.Text = "AAA" MsgBox oTbl.Rows.Count Next oTbl For Each oTbl2 In ActiveDocument.Tables oTbl2.Range.Cells(1).Range.Text = "BBB" MsgBox oTbl2.Rows.Count Next oTbl2 For lngIndex = 1 To ActiveDocument.Tables.Count ActiveDocument.Tables(lngIndex).Range.Cells(1).Range.Text = "CCC" MsgBox ActiveDocument.Tables(lngIndex).Rows.Count Next lbl_Exit: Exit Sub End Sub Last edited by gmaxey; 08-19-2019 at 04:19 AM. |
#7
|
|||
|
|||
Thanks Greg - very informative.
As a practicing idiot, I make the following remark with a great deal of trepidation! I think there's an oversite in your code. Sorry! I think Code:
oTbl.Range.Cells(1).Range.Text = "BBB" Code:
oTbl.Range.Cells(1).Range.Text = "AAA" Unfortunately I haven't yet grasped exactly what's going on, so if I'm right (which is by no means certain), I can't suggest a correction for the third loop. Believe me, this is not a vanity comment. I use sample code from Forums to help me to learn techniques and good practices, so if there IS a bug it would be helpful to future browsers to correct it, and if there ISN'T a bug, an explanation of why my my comments are wrong could prevent other people from making the same mistake. |
#8
|
|||
|
|||
sts,
The code in the third loop did exactly what I coded it wrong to do. It put the text in the active documents first cell, not the the first cell of the indexed table. See revised code. |
#9
|
|||
|
|||
Thanks Greg. Brilliant AND humble (wish I was talking about me!)
|
Thread Tools | |
Display Modes | |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
syntax for inserting blank line before inserting table and after a line or paragraph | SamDsouza | Word VBA | 8 | 08-04-2019 11:10 PM |
Inserting graphic in last table | lodi123 | Word VBA | 2 | 07-07-2017 06:48 AM |
Inserting a table using ADD command | snufse | Word VBA | 1 | 11-10-2015 03:28 PM |
Inserting table | natasha_arriell | Mail Merge | 4 | 06-04-2014 12:13 AM |
Inserting a table | Katelyn | Outlook | 0 | 04-05-2012 09:39 AM |