我正在使用我们的用户名在 Excel 的 VBA 中构建动态宏Environ("Username")
,需要提取大写字符。因此 JohnSmith 变成了 JS
我无法让宏仅返回首字母。它只会给我一个空白的回复
'
' Macro1 Macro
'
Dim Username As String
Dim UserInits As String
Username = Environ("UserName")
Dim i As Integer
Dim spltStr() As String
spltStr = Split(Username)
UserInits = ""
i = 1
Do While i <= Len(Username)
If UCase(spltStr(i)) = spltStr(i) Then
UserInits = UserInits & spltStr(i)
End If
i = i + 1
Loop
MsgBox UserInits
End Sub
有人能看到我做错什么了吗?
我怀疑您的代码是否能运行。原因是该命令
Split(Username)
没有按照您的预期执行。Split
使用分隔符将字符串拆分为单词。如果省略第二个参数(分隔符),则使用空格。因此split("JohnSmith")
将仅返回一个元素(索引为 0),Split(John Smith
) 将返回两个元素,`Split("A;B;C", ";") 将返回 3。按照您的代码,
spltStr(i)
应该会抛出一个运行时错误 9下标超出范围,因为您的 Split 命令肯定不会创建一个具有与名称中的字符一样多的元素的数组(而且它的索引始终从 0 开始)。如果您想检查单个字符,只需使用
mid
带有第三个参数 = 1 的函数。以下简单函数将从字符串中提取大写字符。
调用可能如下所示:
与@FunThomas 的回答类似。这也会删除连字符。
公式版本:
编辑: 已更新以考虑重音字符和任何其他字符 - 只需将其添加到
Letters
字符串中。RegExp
是一个选项。