View Single Post
 
Old 11-22-2021, 01:40 PM
RMittelman RMittelman is offline Windows 10 Office 2016
Novice
 
Join Date: Dec 2010
Posts: 19
RMittelman is on a distinguished road
Default

Thanks GMayor. Great example. In the meantime, I've been working on this and came up with the following code:

Code:
'---------------------------------------------------------------------------------------
' Procedure         : replace_quotes_with_smart_quotes
' Author            : RMittelman@gmail.com
'
' Purpose           : Replaces plain apostrophes & quotes with Word smart quotes
'
' History           :   11/14/2021  Initial version
'                       11/20/2021  Replaced Regex code with Word Find code
'
' Returns           : Boolean indicating success or failure.
'
' Notes             :
'
'---------------------------------------------------------------------------------------
'
Private Function replace_quotes_with_smart_quotes() As Boolean

    Dim myStoryRange    As Object
    Dim arFind          As Variant
    Dim arReplace       As Variant
    Dim i               As Integer
    
    replace_quotes_with_smart_quotes = False
    On Error GoTo error_handler
    
    arFind = Array(" '", "'", " """, """")
    arReplace = Array(Chr$(145), Chr$(146), Chr$(147), Chr$(148))
    
    For Each myStoryRange In WordDoc.StoryRanges
        With myStoryRange.Find
            
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .ClearFormatting
            
            For i = 0 To UBound(arFind)
                .Text = arFind(i)
                .Replacement.Text = arReplace(i)
                .Replacement.ClearFormatting
                .Replacement.Highlight = False
                .Execute Replace:=wdReplaceAll
            Next
            
        End With
    Next myStoryRange

    replace_quotes_with_smart_quotes = True
    
exit_handler:
    
    On Error Resume Next
    Set myStoryRange = Nothing
    Exit Function
    
error_handler:
    
    m_LastError = Err.Description
    If MsgBoxEx(Err.Description, vbRetryCancel + vbExclamation + vbDefaultButton2, "Error " & Err.Number, , , vbRed, , "&Debug", "&Exit") = vbRetry Then
        Stop
        Resume
    End If
    
    replace_quotes_with_smart_quotes = False
    Resume exit_handler

End Function
Somewhat similar to what you did. Not familiar enough with story ranges to understand what you did, or why some of the types require you to do the replacing again.

Looping through the story ranges in a for each loop seems to work, but now I'm concerned that it may fail under certain circumstances.

I'd appreciate knowing what's going on in your code, because I'm using my technique to replace other things in the document also.

Access rich text is totally confusing to Word, so I can't simply place my rich text paragraphs from access storage into a Word document. So I'm using plain text with codes like "<e>", "<se>" & "<ce>" in my paragraph text and then popping them into the Word document and replacing them with {Enter}, {Shift-Enter} & {Ctrl-Enter} Word codes. This seems to work, but now I'm concerned that I'm not using story types and text frames and such.

Thanks again...
Reply With Quote