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