随心所欲大小写转换自定义函数

无论是在工作表中,还是VBA编程中,经常需要使用英文字母大小写转换功能。Excel函数中提供了UPPER,LOWER,PROPER三个函数,VBA中提供了UCASE,LCASE两个函数,为什么还要开发类似功能的自定义函数?这并不是重新发明轮子,而是要制造一个功能更完善的轮子也许是一个喷气发动机。
例如:对于这个句子this is a dog from USA.,希望转换为单词首字母大写,并且对于专有名称缩写USA保持大写。工作表函数PROPER的转换结果为This Is A Dog From Usa.,并不能很好的实现这个需求。借助Shape对象的文本处理功能可以实现功能丰富的大小写转换。
示例代码如下。

Public Function fnStrCase(ByVal strLine As String, _
                Optional intMode As Integer = 4) As String
    On Error Resume Next
    If intMode < 1 Or intMode > 5 Then
        fnStrCase = "#Err#"
    Else
        With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 0, 0, 0)
            With .TextFrame2.TextRange
                .Text = strLine
                .ChangeCase (intMode)
                fnStrCase = .Text
            End With
            .Delete
        End With
    End If
    On Error GoTo 0
End Function

工作表中示例数据如下。
在这里插入图片描述
A2单元格为原始内容,intMode参数是MsoTextChangeCase 枚举,取整范围1~5,其含义如下。
在这里插入图片描述
【代码解析】
第3行代码忽略运行时错误。
第4行代码判断,intMode参数的范围,如果不合规,则返回#Err#
第7行代码添加一个矩形框,并将大小设置为0,这样就不会影响用户的Excel界面。
第9行代码将需要转换的字符串赋值给Shape对象的Text属性。
第10行代码调用ChangeState方法,转换方式由intMode参数指定。
第11行代码读取转换后的字符串。
第13行代码删除创建的矩形框。
第16行代码恢复系统的错误处理机制。


借助Excel内置对象的法可以非常完美的实现一些需求,比使用基础的字符串函数逐个字符进行判断和处理更简洁高效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章