我已经遇到了这个VBA代码。任何帮助将不胜感激。我正在尝试将2个单词的首字母从小写改为大写。另外,我应该如何在代码中考虑这两个词之间的空格?
我一直无法执行代码,因为我不断收到此编译错误:“参数不是可选的”。
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 :(得分: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
返回字符串的长度
If rText(Mid(1, 1)) = LCase(Str) Then
~~ Mid
将字符串作为第一个参数,然后是起点,然后是结束点(可选)。
不确定您在以下几行中尝试做什么。
rText = UCase(Str)
If rText(Mid(6, 1)) = LCase(Str) Then
rText = UCase
答案 1 :(得分:0)
除了Excel函数PROPER
str = WorksheetFunction.Proper("UPPER lower") ' "Upper Lower"
还有VBA.StrConv
功能:
str = StrConv("UPPER lower", vbProperCase) ' "Upper Lower"
要仅将字符串的部分转换为大写,您可以使用RegEx
或Mid statement:
Mid(str, 1, 1) = UCase(Mid(str, 1, 1)) ' makes the first letter uppercase