Pasting Tables from Excel to Word
Hari:
One of the difficulties of controlling one program through another program's
VBA is getting the references set correctly. In an Excel macro which
controls Word, "Range" could refer to either an Excel or a Word range,
depending on how it's declared. "Dim oRange As Range" in an Excel macro is
going be assumed to be an Excel range. To make it a range in your Word
document, it must be declared as "Dim oRange As Word.Range".
Unfortunately, I am not all that expert, and usually have to stumble through
my mistakes to catch these things. And occasionally I inflict these
mistakes on others, too! Sorry. Apparently, Selection *almost always*
assumes itself to belong to the parent application - in this case, Excel.
That's not a bad thing, really. Range is much preferred over Selection.
Selection refers to what the insertion point has selected. If a few letters
or an entire paragraph is selected, then that is "Selection". Any actions
taken on the Selection object will be performed on whatever is selected.
When the Selection is only a single insertion point, some actions are not
available, but that is still Selection.
Range is good because the insertion point doesn't move. It helps speed
things up considerably. And it is much easier to "put a handle on" through
another program, allowing you to avoid "automatic assumptions" by the parent
program.
Word has a built-in range called "Content". So if we declare a Word range
and set it to the document's Content range, we can use Range methods and
properties to do what we need. Collapse will take us to either end of the
range, depending on which direction we choose. Then one of the Insert
methods can be used.
Try this:
' Range is specific to the program
Dim oRange as Word.Range
' String is a string is a string
Dim strMsg As String
strMsg = "Hello!"
' "doc" is used to refer to the
' Word document object you are using
Set oRange = doc.Content
' oRange equals the entire scope of the doc
oRange .Collapse wdCollapseEnd
' oRange now equals only the
' insertion point at the end of the doc
oRange .InsertBreak Type:=wdPageBreak
' Since we've increased the content of the doc,
' we need to reset oRange to encompass it all
Set oRange = doc.Content
oRange .Collapse wdCollapseEnd
oRange .InsertAfter strMsg
You should have a new page at the end of "doc" with "Hello!" on it.
Regarding the differing syntaxes of Word, Excel, PPT, and other VBA
codings - yes, they all have different "dialects", as it were. Just as
people from different parts of a country often have different names for
objects and actions, the VBA of the various programs call things
differently.
HTH
Ed
"Hari Prasadh" wrote in message
...
Ed,
Thanks a lot for your post. Bookmarks("\EndOfDoc"). has been very helpful.
Since am coding in excel to control Word - Selection.InsertBreak
Type:=wdPageBreak - yields an error, because it is probably trying to
mimic
this action in Excel itself. If I change it to
Sdocument.Selection.InsertBreak Type:=wdPageBreak - then I get run-time
error '438' - object doesnt support this property or method. I also
tried -
SDocument.Range.InsertBreak Type:=wdPageBreak - but this causes the
freshly
pasted table to disappear (and a new page does get inserted). What is the
correct syntax for inserting a page so that existing data doesnt get lost.
Also, I dont understand a to what is the difference between selection and
range in Word. In word If I record a macro for let's say the action of
pressing enter I get code as - Selection.TypeParagraph - Now, if in excel
I
set a reference to Word and write - Sdocument. - then after the period the
intelli sense doesnt offer Selection but offers Select only. I thought may
be when coding through another environment Range may be the equivalent of
Selection. But using - Sdocument.Range. - Type paragraph is not a option
offered by intelli sense.
Why is that when coding in excel and trying to control word, the word
syntaxes dont work when pasted directly from word VBA to excel VBA (after
appending Sdocument. in the starting of each code)?? I have noticed the
same
thing when I write code in excel to control PPT or vice-versa
Regards my problem of controlling column widths I think I have probably
found a workaround for the same. I will save each table of Excel (by
putting
borders in it) as a HTML file then open the same in word and this seems to
have the same column widths as in excel. Im trying to automate this
process
presently and hope to do it.
Thanks a lot,
Hari
India
"Ed" wrote in message
...
Hari:
(A) Try SDocument.Bookmarks("\EndOfDoc").Select
(B) If all you want is a new page and not a new section, try
Selection.InsertBreak Type:=wdPageBreak
(I used Selection rather than Range with the assumption that your
insertion
point is at the end of the document.)
The column width behavior is hard to deal with because Word wants to
automatically format a lot of your table stuff for you. You can turn it
off
when a table is created, but that's after the fact when you paste. I
can
see two possible considerations.
If you do not need the table in Word to be an actual table, then you can
paste the Excel table in as a Picture (see Word VBA Help for
PasteSpecial,
or in the Excel code you can use the CopyPicture method instead of Copy
and
then Paste in Word). This inserts the Excel range as a graphic, which
means
it can not be edited nor can it be searched for text. It will, however,
fit
your page and retain the look of your Excel file.
If, however, you do need the Word table to be text rather than graphic,
then
you are going to need to make sure your Word document is as much the
same
size as your Excel page. Do a Print Preview in Excel - what are your
page
margins? are you landscape or portrait? do you have a scaling factor or
percentage? what about your font and size? Also, Word adds two
characters
in every cell as a marker - these can add an extra bit of width.
HTH
Ed
"Hari Prasadh" wrote in message
|