![]() |
|
#1
|
|||
|
|||
|
Hi,
my VBA code is running in Excel. It runs a word search in a Word document, and from the results returns the Sentence of each match. So, the below code works fine if the found text is in a paragraph: Code:
oWordApp.Selection.Sentences(1) I can't figure out how to access the sentence of the current selection, when it's in a table. Can anyone help? Thanks |
|
#2
|
|||
|
|||
|
Hi! 'oRng.Sentences(1).Select' works both in text and tables IF (according to my tests) there is more than one sentence in a paragraph. Note that Word has an unclear idea of a sentence, e.g.: "The book was written by J. Smith, ..." can be treated as two sentences: (1) "The book was written by J." and (2) "Smith, ..."
Keeping in mind the IF described above, you can also use: oRng.Select selection.Expand Unit:=wdSentence Another method (although not a one-liner), which "doesn't care about" the IF, is: selection.Extend selection.Extend selection.Extend Note that three lines must be used: line 1 activates the extend function, line 2 extends the selection to the current word, line 3 extends the selection to the current sentence. If you wanted to select the current paragraph, the fourth 'selection.Extend' would have to be added. |
|
#3
|
||||
|
||||
|
The issue relates to how many sentences there are in the table cell and which sentence the selection occurs in. If the selection is in the last sentence or only sentence in the cell, the whole cell is selected. You can test for this and make the necessary adjustment e.g.
Code:
Dim orng As Object
Set orng = oWordApp.Selection.Range
If orng.Information(12) Then
If orng.Sentences(1) = orng.Cells(1).Range.Sentences.Last Then
Set orng = orng.Cells(1).Range.Sentences.Last
orng.End = orng.End - 1 'omit the table cell end character
orng.Select
Else
orng.Sentences(1).Select
End If
Else
orng.Sentences(1).Select
End If
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#4
|
|||
|
|||
|
Thanks for your replies.
@gmayor, I couldn't get your code to work. So where I currently have the line below, how would this fit in with your code: Code:
sStringVariable = oWordApp.Selection.Sentences(1) |
|
#5
|
|||
|
|||
|
Is anyone else able to advise on this?
I don't really understand the replies. Basically, all I want to do is use the below code to get the whole sentence of the selected word. BUT - this doesn't work if the word is in a table Code:
sStringVariable = oWordApp.Selection.Sentences(1) |
|
#6
|
|||
|
|||
|
Hi gmayor.
I tried this and it works fine if the sentence is not the last cell. But if the sentence is the last cell it returns weird characters (I think they are end of table chars). Thanks Quote:
|
|
#7
|
|||
|
|||
|
Hi, hss001! I'm repeating my answer: after finding & selecting your word use the following three lines:
Code:
selection.Extend selection.Extend selection.Extend |
|
#8
|
|||
|
|||
|
Hi, this method works perfectly in isolation. The issue is that the code I've inherited does a Find using a Selection. So, modifying the selection by extending it breaks the Find.
|
|
#9
|
|||
|
|||
|
hss001, do you want the code to msgbox, select or highlite the found sentence(s)? If the found senetence is selected the original selection will be always broken. Sorry, but I don't quite understand your aim.
|
|
#10
|
|||
|
|||
|
Ideally, I want to "select" the "sentence" of the selected text - this will work without needing to modify any other code.
So the below line works fine, EXCEPT when the text is in a table and also the last row - as it picks up end of row characters. Code:
sStringVariable = oWordApp.Selection.Sentences(1) So, all I need to do is detect if the selection is in the last row of a table, and then strip off the last 2 chars. |
|
#11
|
|||
|
|||
|
Hss001, try this one:
Code:
Sub Find_Wd_N_Select_Sent()
'In the selected range, find the inputboxed wd & select the 1st sentence it is in.
Dim oRng As range
Dim strWd As String
Set oRng = selection.range
strWd = InputBox("Enter the word to find", "FIND")
With oRng.Find
.ClearFormatting
.Replacement.ClearFormatting
.text = strWd
.Replacement.text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchWildcards = False
If .Execute Then
oRng.Select
selection.Extend: selection.Extend: selection.Extend
End If
End With
Set oRng = Nothing
End Sub
|
|
#12
|
|||
|
|||
|
Thanks for your help with this.
I have something similar, but using the Find command on the Selection. So if the Selection is modified the Find doesn't work correctly. Code:
m_oWordDoc.Bookmarks("\StartOfDoc").Select
m_oWordApp.Selection.Find.ClearFormatting
With m_oWordApp.Selection.Find
.Text = sPhraseToFind
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = bMatchCase
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While m_oWordApp.Selection.Find.Execute = True
sSentenceToSearch = m_oWordApp.Selection.Sentences(1)
' Above is incorrect if the found text is the last row in a table
' Additional Code
End If
Loop
End With
|
|
#13
|
|||
|
|||
|
I'm glad I've managed to help you!
|
|
#14
|
|||
|
|||
|
I still have the issue yet but I think a solution is nearer..
![]() |
|
#15
|
|||
|
|||
|
You are closer to what?
Code:
Sub Find_Wd_N_Select_Sent()
'In the selected range, find the inputboxed wd & select & msgbox the 1st sentence it is in.
Dim oRng As range
Dim strWd As String
Dim rSentToSearch As range
Set oRng = selection.range
strWd = InputBox("Enter the word to find", "FIND")
With oRng.Find
.ClearFormatting
.Replacement.ClearFormatting
.text = strWd
.Replacement.text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchWildcards = False
If .Execute Then
oRng.Select
selection.Extend: selection.Extend: selection.Extend
End If
Set rSentToSearch = selection.range
End With
MsgBox rSentToSearch
Set oRng = Nothing
Set rSentToSearch = Nothing
End Sub
|
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
accessing avery label table in macro
|
littlepeaks | Word VBA | 10 | 08-09-2022 12:12 PM |
Footnote formatting>"Apply changes to selected text" not limiting changes to selected text
|
Swarup | Word | 11 | 07-26-2022 01:51 PM |
Find and Replace Selected Text or Macro for finding selected text
|
mrplastic | Word VBA | 4 | 12-20-2019 01:25 PM |
| Word for Mac 2011: Problems accessing Text Boxes programmatically | techy291 | Word VBA | 0 | 07-16-2017 08:41 AM |
Select Text in Table but Table Gets Selected Too
|
RBusiness | Word | 1 | 06-07-2011 04:26 PM |