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