![]() |
#2
|
||||
|
||||
![]()
As you are probably aware, a Word document comprises several separate story ranges, a bit like a pile of transparencies (if you are old enough to remember them) that combine to make the whole. I believe 'Content' reflects only the main story range.
To be certain of processing all the story ranges you need to do so separately and the following code, based on Word code from my web site, should do that. I don't work in Access, but it works in Excel where the principle is similar: Code:
Option Explicit 'Graham Mayor - https://www.gmayor.com - Last updated - 22 Nov 2021 Sub ReplaceInStoryRanges() Const sPath As String = "C:\Path\docname.docx" ' the path of the document Dim WordDoc As Object Dim wdApp As Object Dim oStory As Object Dim oShp As Object Dim bFormat As Boolean On Error Resume Next Set wdApp = GetObject(, "Word.Application") If Err Then Set wdApp = CreateObject("Word.Application") End If On Error GoTo 0 Set WordDoc = wdApp.Documents.Open(sPath) 'works in Word even if the document is already open bFormat = wdApp.Options.AutoFormatAsYouTypeReplaceQuotes wdApp.Options.AutoFormatAsYouTypeReplaceQuotes = False For Each oStory In WordDoc.StoryRanges Select Case oStory.StoryType Case 1 To 11 Do ReplaceQuotes wdApp, WordDoc, oStory DoEvents On Error GoTo 0 Select Case oStory.StoryType Case 6, 7, 8, 9, 10, 11 If oStory.ShapeRange.Count > 0 Then For Each oShp In oStory.ShapeRange If oShp.TextFrame.HasText Then ReplaceQuotes wdApp, WordDoc, oStory End If DoEvents Next oShp End If Case Else End Select On Error GoTo 0 Set oStory = oStory.NextStoryRange Loop Until oStory Is Nothing Case Else End Select DoEvents Next oStory wdApp.Options.AutoFormatAsYouTypeReplaceQuotes = bFormat End Sub Sub ReplaceQuotes(wdApp As Object, oDoc As Object, oRng As Object) Dim oFind As Object Dim vFindText As Variant Dim vReplText As Variant Dim bQuotes As String Dim i As Long vFindText = Array(Chr(132), Chr(147), Chr(148), ChrW(171) & ChrW(160), ChrW(160) & ChrW(187), Chr(145), Chr(146)) vReplText = Array(Chr(34), Chr(34), Chr(34), Chr(34), Chr(34), Chr(39), Chr(39)) wdApp.Options.AutoFormatAsYouTypeReplaceQuotes = False For i = LBound(vFindText) To UBound(vFindText) Set oFind = oRng.Duplicate With oFind.Find Do While .Execute(vFindText(i)) oFind.Text = vReplText(i) oFind.Collapse 0 Loop End With Next i lbl_Exit: Set oFind = Nothing Exit Sub End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
Tags |
regex, vba, word 16 |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
![]() |
branko | Word VBA | 1 | 03-28-2017 11:50 PM |
![]() |
Belleke | Word VBA | 3 | 10-24-2016 01:00 AM |
Table of content to not include TOC as first section!? | neuroscientist911 | Word | 4 | 11-19-2014 07:55 AM |
Windows Search Does Not Include Outlook | jkingston | Outlook | 0 | 07-20-2014 08:43 AM |
Looking for Windows Search app with ability to search by content | gopher_everett | Office | 1 | 02-28-2013 09:23 PM |