View Single Post
 
Old 08-17-2021, 11:59 PM
Peterson Peterson is offline Windows 10 Office 2019
Competent Performer
 
Join Date: Jan 2017
Posts: 143
Peterson is on a distinguished road
Default Trouble converting a sub to function, incl. passing argument and nixing Selection

I'm trying to convert a macro to a function. The macro converts user-selected text to title case. I want the function to convert a string variable instead.

I'm struggling to figure out how passing a string - as a range - to the function, and how to convert the function's Selection elements to Range elements.

First, should I even be passing a range? And if so, how do I first convert a string variable to a range? The super-crude approach below works, but is ugly -- it's because I haven't been able to figure out how to instantiate the range and assign it text at the same time:
Code:
Sub Test_PassToFunction()

    Dim rngTitle As Range
    
    Set rngTitle = ActiveDocument.Words(1)
        
    rngTitle.Text = "SECTION 00 00 00 - THIS IS THE TITLE OF THE SECTION"
    ' (The string is actually a variable coming from another macro.)
    
    fcnTitleCase (rngTitle)
    
End Sub
Meanwhile, I want the function to convert the string without Selection. Ample searching and multiple attempts have only yielded as many error messages. Here's the code:
Code:
Function fcnTitleCase(rngTitle)
' From Allen Wyatt
' https://word.tips.net/T000215_Intelligent_Title_Case.html

    Dim lclist As String
    Dim wrd As Integer
    Dim sTest As String

    ' list of lowercase words, surrounded by spaces
    lclist = " of the by to this is from a "

    Selection.Range.Case = wdTitleWord

    For wrd = 2 To Selection.Range.Words.Count
        sTest = Trim(Selection.Range.Words(wrd))
        sTest = " " & LCase(sTest) & " "
        If InStr(lclist, sTest) Then
            Selection.Range.Words(wrd).Case = wdLowerCase
        End If
    Next wrd
 End Function
Thank you
Reply With Quote