![]() |
#1
|
|||
|
|||
![]()
I have created new document and inserted two paragraphs. First paragraph holds text "par2" and second paragraph holds text "par2". Now I execute the following macro (comments explain behavior).
Code:
Sub TestParagraphs() Dim p As Paragraph With ActiveDocument ' Variable "p" seems to hold reference ' to new (third) paragraph.... Set p = .Paragraphs.Add() ' ...or does it? p.Range.Text = "par3" ' What we get here is that third paragraph is gone ' AND second paragraph now holds "par3" text. ' This is work around, which works. .Paragraphs.Add Set p = .Paragraphs(.Paragraphs.Count) p.Range.Text = "par3" End With End Sub |
#2
|
||||
|
||||
![]()
The problem with your code is that 'p.Range.Text = "par3"' overwrites the whole of what used to be the final paragraph, including the break. Try 'p.Range.InsertAfter "par3"' to update the new final paragraph or 'p.Range.InsertBefore "par3"' to update the old one (note that this will not delete whatever's already in that paragraph).
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#3
|
|||
|
|||
![]()
@macropod
Thanks for answer, but this Word's object model doesn't fit my mind. It's highly non-intuitive. I add paragraph with Paragraphs.Add(). Then I have these two options to obtain reference to newly created paragraph: 1) with Set p = .... and 2) Paragraphs(Paragraphs.Count). But in reality they are two different objects! Why? |
#4
|
||||
|
||||
![]()
Word's object model is quite logical, actually. Your code defines a range [via Set p = .Paragraphs.Add()], which can't be outside the range defined by the document's final paragraph break (otherwise it wouldn't be part of the document), so it has to occur before that, then replaces whatever's in that range with something else [via p.Range.Text = "par3"]. You can confirm that's what happening be changing 'p.Range.Text = "par3"' to 'p.Range.Font.ColorIndex = wdRed'. I suspect the problem you're having is a conceptual one, rather than anything to do with Word's object model.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#5
|
|||
|
|||
![]() Quote:
![]() And yes - the main struggle is paragraphs and all manipulating with them. I would like you to help me with this. So, when I execute Paragraphs.Add(), I see new paragraph mark which happens to be the last one in document. So, this is my paragraph. It has a Range.Text property which can be assigned some text. What I do not understand, why p.Range.Text deletes this brand new paragraph and, moreover, replaces the text of second paragraph? Look. Paragraphs(Paragraphs.Count) refers to the same paragraph. Then why p.Range.Text fails to work when Paragraphs(3) works fine? Can you explain me more in detail? Thanks beforehand! |
#6
|
||||
|
||||
![]() Quote:
Quote:
PS If you want to reference the last paragraph, you could also use 'Set p = .Paragraphs.Last'.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#7
|
|||
|
|||
![]()
A picture is worth a thousand words.
![]() |
![]() |
Thread Tools | |
Display Modes | |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Confusion over licences | Nez | Office | 5 | 02-03-2014 03:29 AM |
![]() |
portia | Word | 8 | 11-29-2011 02:08 PM |
![]() |
chris29 | Outlook | 1 | 08-24-2011 01:22 PM |
![]() |
ridge1988 | Word | 2 | 03-31-2011 07:42 PM |
Windows Update confusion | Quicksilver | Office | 0 | 06-24-2010 12:33 PM |