#1
|
|||
|
|||
Deleting the first word of a second paragraph
I have code that when I copy text into my document, it introduces an error in the "second" paragraph. That is, I add text as one paragraph, I then paste text into the second paragraph (and many more). These paragraphs have a numbered style, eg, "[0100] Paragraph text", and for some reason, when I paste text into the document, it ends up with "[0100] [0100] Paragraph Text", where I want to delete the second "[0100]". (NOTE: The text I'm copying in is pasted in as text without these paragraph numbers. I paste in many paragraphs, and only the first pasted para -- which is the second para of selected range -- has this error.)
So, I want to delete the first word (+ any spaces until the second word) of the second paragraph. Seems easy, right? Well, I've worked for a few hours on it. The oRng has the selected range in the code below. You can see one delete statement that deletes the first character in the second paragraph. I show another delete statement that deletes the entire second paragraph. This code looks for a space. Should there be additional code to look after the space for another character that is not a space (what if there are two spaces?)? Then once that "i" is known, delete characters up to i-1? That makes sense to me, but I'm not sure how to do this. Code:
Dim firstWordEnd As Long Dim secondPara As Paragraph Dim i As Long ' Get the second paragraph in the range Set secondPara = oRng.paragraphs(2) ' Check if there's at least one character in the paragraph If secondPara.Range.Characters.Count > 1 Then ' Loop through the characters in the second paragraph range For i = 1 To secondPara.Range.Characters.Count ' Check if the character is a word separator (space) If secondPara.Range.Characters(i) = " " Then ' Delete the range up to the end of the first word ' The following deletes the first character of the second para ' secondPara.Range.Characters(1).Delete ' The following deletes the entire second para secondPara.Range.MoveStart unit:=wdCharacter, Count:=i secondPara.Range.Delete Exit For End If Next i End If |
#2
|
|||
|
|||
Hi, ctviggen! Try this simple code:
Code:
Sub Del_Wd() ActiveDocument.range.Paragraphs(2).range.words(1).Delete End Sub |
#3
|
|||
|
|||
Thank you for that, and sorry for my delay in responding. I often only have weekends to work on this, then not much time.
Anyway, I have a variable oRng, which I did not discuss. After adding text and pasting text in, oRng has the range of the text that has been added and pasted. So, I modified your code to be "oRng.paragraphs(2).Range.Words(1).Delete". This worked...a bit. We're using numbered paragraphs, my test document has something like "[00344](tab)", the numbered paragraph of [00344] followed by a tab character, then it's blank. I add some text, add a new paragraph, then paste selected text in and manipulate it. After doing this without the code above: [00344](tab)Text I added [00345](tab)[00345] Beginning of what was pasted in... The "[00345]" is repeated for some reason. Only happens here. All the following paragraphs are fine. If I use the "oRng.paragraphs(2).Range.Words(1).Delete" to delete the first word of the second paragraph, this is what happens: [00344](tab)Text I added [00345](tab)00345] Beginning of what was pasted in... The beginning bracket [ is removed. If I attempt to delete the second "word" with "oRng.paragraphs(2).Range.Words(2).Delete", I get the following: [00344](tab)Text I added [00345](tab)00345 Beginning of what was pasted in... I have deleted the beginning bracket [ and the ending bracket ], but not the "word" 00345. Maybe the "00345" isn't a "word"? But it seems to be just numbers that are bold (because our paragraph numbering is bold). I can manually delete this with no issues. I tried (re)applying the style to that paragraph, nothing happens. I could possibly delete by characters, so I tried the following: Code:
Dim tRng As Word.Range Set rTng = oRng.paragraphs(2).Range tRng.Collapse Direction:=wdCollapseStart tRng.Delete (wdCharacter,8) But I can't get the syntax of the last part correct. (The code above generates an error.) To me, this looks like "expression.Delete([Unit], [Count])", which is here: Range.Delete method (Word) | Microsoft Learn Unfortunately, there's no example there of using a Unit, Count. I'm at a loss as to how to delete 8 characters. |
#4
|
|||
|
|||
Oops, that "rTng" should be tRng. But I still get an error on the last line of code.
|
#5
|
|||
|
|||
ctviggen, what exactly do you want to delete in
[00344](tab)Text I added [00345](tab)[00345] Beginning of what was pasted in...? Everything until or after the tab? Or maybe sth else? If you want to delete everything until after the tab in the selected paragraphs, try this: Code:
Sub Del_Until() Dim rng As range, oPar As Paragraph Application.ScreenUpdating = False Set rng = selection.range For Each oPar In rng.Paragraphs oPar.range.Select selection.MoveEndUntil cset:=vbTab, count:=wdBackward selection.Delete Next oPar Application.ScreenUpdating = True Set rng = Nothing End Sub Code:
Sub Del_Until() selection.Paragraphs(2).range.Select selection.MoveEndUntil cset:=vbTab, count:=wdBackward selection.Delete Set rng = Nothing End Sub Last edited by vivka; 03-10-2024 at 11:10 AM. |
#6
|
|||
|
|||
Thank you.
Basically, this is what I get: [00344](tab)Text I added [00345](tab)[00345] Beginning of what was pasted in... This is what I want: [00344](tab)Text I added [00345](tab)Beginning of what was pasted in... That is, the second "[00345]" is something that happens, I'm not sure why. I just want to delete this, since it's not supposed to be there and is an artifact of pasting (not sure WHY it occurs, though). Let me see if I can modify your code to do this. |
#7
|
|||
|
|||
I tried to get this done, and I'm getting closer, but I have to go to family stuff. I'll see if I can come back to this.
But, in pseudo-code, this is what I'm trying to do (where the variable oRng has the range of everything I've added/pasted in): 1- Go to the second paragraph of the range oRng 2- Start at the beginning of the paragraph, go 8 characters or to the character before the word "Example". Select these characters. 3- Delete the selected characters. Seems super easy, but is harder than it appears. Thank you for the help. |
#8
|
|||
|
|||
Try the following:
Code:
Sub Del_Test() Dim oRng As range Set oRng = selection.Paragraphs(2).range If InStr(oRng, "Example") Then oRng.Collapse oRng.MoveEndUntil cset:="Example" Else oRng.Collapse oRng.MoveEnd unit:=wdCharacter, count:=8 End If oRng.Delete Set oRng = Nothing End Sub |
#9
|
|||
|
|||
This is better. Since cset recognizes characters, not strings, "Example" is useless:
Code:
Sub Del_Test() Dim oRng As range Set oRng = selection.Paragraphs(2).range If InStr(oRng, "Example") Then oRng.Collapse oRng.MoveEndUntil cset:="E" Else oRng.Collapse oRng.MoveEnd unit:=wdCharacter, count:=8 End If oRng.Delete Set oRng = Nothing End Sub |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Deleting all text from a slide pack without deleting the formatting | redordead2389 | PowerPoint | 0 | 05-31-2023 06:50 AM |
Word macro for deleting a line that starts with a specific character + deleting the line before | eduardb | Word | 1 | 08-10-2022 03:17 AM |
Inserting text from a Userform into a Field in a paragraph in a paragraph in a word document | storemaz | Word VBA | 1 | 03-13-2020 08:11 AM |
Deleting paragraph commands | afndst | Word VBA | 2 | 12-30-2015 02:07 AM |
Deleting a script in an equation without deleting the whole term | allankey | Word | 1 | 02-15-2014 07:09 AM |