2017-02-25 156 views
2

我已經被這個VBA代碼卡住了。任何幫助將不勝感激。我正在試圖將2個單詞的第一個字母從小寫更改爲大寫。另外,如何在代碼中考慮這兩個詞之間的空間呢?使用中間字符串的VBA代碼小寫字母到大寫字母

我一直不能執行代碼,因爲我不斷收到此編譯錯誤:「參數不可選」。

Function Properword(Text) 
Dim rText 
rText = Len(rText) 
If rText(Mid(1, 1)) = LCase(Str) Then 
    rText = UCase(Str) 
    If rText(Mid(6, 1)) = LCase(Str) Then 
    rText = UCase 
End If 

端功能

乾杯!

+0

顯示您正在嘗試實現的示例 – user3598756

+2

已回滾。切記不要在感謝人時刪除問題,使答案難以理解。 :)只需勾選您認爲回答問題的答案即可。 –

回答

4

首先,您不必使用UDF。只需使用內置的WorksheetFunction.Proper函數即可實現ProperCase。

如果你仍然要創建UDF,一個例子是

Function Properword(strTxt) 
    Dim arrTxt 

    arrTxt = Split(strTxt, " ") 
    For i = LBound(arrTxt) To UBound(arrTxt) 
     arrTxt(i) = UCase(Left(arrTxt(i), 1)) & Mid(arrTxt(i), 2) 
    Next 

    Properword = Join(arrTxt, " ") 
End Function 

最後,你的代碼

rText = Len(rText)問題~~這意味着rText將包含一個數值,因爲Len返回的lenght字符串

If rText(Mid(1, 1)) = LCase(Str) Then ~~ Mid將字符串作爲第一個參數,然後是起始點,然後是結束點(可選)。

不知道你在下面的行中試圖做什麼。

rText = UCase(Str) 
If rText(Mid(6, 1)) = LCase(Str) Then 
rText = UCase 
0

除了Excel函數PROPER

str = WorksheetFunction.Proper("UPPER lower") ' "Upper Lower" 

也有VBA.StrConv功能:

str = StrConv("UPPER lower", vbProperCase)  ' "Upper Lower" 

要轉換的字符串只有部分爲大寫,你可以使用RegExMid statement

Mid(str, 1, 1) = UCase(Mid(str, 1, 1))   ' makes the first letter uppercase