Just to highlight more clearly the challenge I faced was to produce the text as follows with highlighted numbers in bold changing their position as inputted by user, sample of text as illustrated below:
“The company was added as a component to the S&P 500 index Thursday, and it gained 1.8% Friday, trading at $194.58.”
This challenge, I overcome by using a great functionality presented by VBAExpress to format cell text under VBA control, where I was able to locate the required text and format as required.
The section code I utilized in my work is as follows with the comments illustrating the usage:
Option Explicit
Sub xlCellTextMgmt( _
TargetCell As Range, _
TargetWord As String, _
Optional FirstOnly As Boolean = True, _
Optional FontName As String, _
Optional FontBold As Boolean, _
Optional FontSize As Variant, _
Optional FontColor As Variant)
'
'****************************************************************************************
' Title xlCellTextMgmt
' Target Application: MS Excel
' Function: reformats selected text within the target cell
' Limitations: no explicit checks for acceptable values, e.g., does not
' check to ensure that FontName is a currently supported
' font
' Passed Values
' TargetCell [input,range] the target cell containing the text to
' be reformatted
' TargetWord [input,string] the words in the target cell text that are
' to be reformatted. TargetWord can contain
' anything from a single character to several
' words or even the entire text of the target
' cell
' FirstOnly [input,boolean] a TRUE/FALSE flag indicating if the
' reformatting is to be done on ONLY the 1st
' instance of the target word (True) or on ALL
' instances (False) {Default = True}
' FontName [input,string] the name of the new font. Omit if the font
' is to be left unchanged
' FontBold [input,boolean] a TRUE/FALSE flag indicating if the target
' words should be BOLD. True ==> Bold. Omit
' if the text is to be left unchanged.
' FontSize [input,variant] the size of the new font. Omit if the size
' is to be left unchanged.
' FontColor [input,variant] the color of the new font. Can be one of
' the standard colors from the Excel palette or
' can be one of the standard "vbColors".
' Omit if the color is to be left unchanged.
'
'****************************************************************************************
'
'
Dim Start As Long
Start = 0
Do
'
' find the start of TargetWord in TargetCell.Text
' if TargetWord not found, exit
'
Start = InStr(Start + 1, TargetCell.Text, TargetWord)
If Start < 1 Then Exit Sub
'
' test for each font arguement, if present, apply appropriately
'
With TargetCell.Characters(Start, Len(TargetWord)).Font
If IsNull(FontName) = False Then .Name = FontName
If IsNull(FontBold) = False Then .Bold = FontBold
If IsNull(FontSize) = False Then .Size = FontSize
If IsNull(FontColor) = False Then .ColorIndex = FontColor
End With
'
' if request was for ONLY the first instance of TargetWord, exit
' otherwise, loop back and see if there are more instances
'
If FirstOnly = True Then Exit Sub
Loop
End Sub
This code i used within a worksheet activate event where a user input could be plugged in on a diffrent worksheet and could be reflected instanly upon a change on the final report sheet.
Refrences:
http://www.vbaexpress.com/kb/getarticle.php?kb_id=743
No comments:
Post a Comment