我正在 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)
应该抛出运行时错误9Subscript out of Range,因为您的Split命令肯定不会创建一个包含与名称中的字符一样多的元素的数组(而且它的索引始终从0开始) .
mid
函数,第三个参数 = 1。
以下简单函数将从字符串中提取大写字符。
Function GetInitials(s As String) As String
Dim i As Long
For i = 1 To Len(s)
Dim c As String
c = Mid(s, i, 1)
If UCase(c) = c And Asc(c) > 32 Then
GetInitials = GetInitials & c
End If
Next i
End Function
调用可能如下所示:
Sub t1()
Dim Username As String
Username = Environ("UserName")
MsgBox GetInitials(Username)
' or
MsgBox GetInitials("User FunThomas gave me a good Answer on StackOverflow")
End Sub