隨心所欲大小寫轉換自定義函數

無論是在工作表中,還是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內置對象的法可以非常完美的實現一些需求,比使用基礎的字符串函數逐個字符進行判斷和處理更簡潔高效。

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