请帮我解决这个问题。
我正在使用MS Access数据库,请帮助VBA代码。
我有一个名为[CUSTOMER NAME]
的文本框,其中包含以下数据:
"JONES CLARENCE J"
"MORRIS D"
"MORRIS ART & ANNE"
我想将这些名称的首字母缩写为不同的文本框,如下所示:
"JONES CLARENCE J"
为"J.C.J."
"MORRIS D"
为"M.D."
"MORRIS ART & ANNE"
为"M.A.A."
提前致谢
您可以利用VBA Split
函数执行此任务:提供字符串和分隔符,此函数将在每次出现分隔符时拆分字符串并返回子字符串数组。
在你的情况下,分隔符是一个空格,例如:
?Split("JONES CLARENCE J", " ")(0)
JONES
?Split("JONES CLARENCE J", " ")(1)
CLARENCE
?Split("JONES CLARENCE J", " ")(2)
J
从那里,您可以使用Left
函数返回每个子字符串的第一个字符:
?Left(Split("JONES CLARENCE J", " ")(0),1)
J
?Left(Split("JONES CLARENCE J", " ")(1),1)
C
?Left(Split("JONES CLARENCE J", " ")(2),1)
J
有了这些知识,我们可以构造一个简单的函数来迭代子字符串数组并获得每个子字符串的第一个字符,例如:
Function InitialiseString(strNme As String) As String
Dim strSub As Variant
For Each strSub In Split(strNme, " ")
Debug.Print Left(strSub, 1)
Next strSub
End Function
?InitialiseString("JONES CLARENCE J")
J
C
J
但是,我们希望在示例中排除字符串,例如&符号:
?InitialiseString("MORRIS ART & ANNE")
M
A
&
A
在输出字符之前,我们可以使用简单的if
语句来测试字符:
Function InitialiseString(strNme As String) As String
Dim strSub As Variant
For Each strSub In Split(strNme, " ")
If Left(strSub, 1) Like "[A-Za-z]" Then
Debug.Print Left(strSub, 1)
End If
Next strSub
End Function
?InitialiseString("MORRIS ART & ANNE")
M
A
A
最后,给定一个有效的字符,我们需要构造输出:
Function InitialiseString(strNme As String) As String
Dim strSub As Variant
For Each strSub In Split(strNme, " ")
If Left(strSub, 1) Like "[A-Za-z]" Then
InitialiseString = InitialiseString & Left(strSub, 1) & "."
End If
Next strSub
End Function
?InitialiseString("JONES CLARENCE J")
J.C.J.
?InitialiseString("MORRIS D")
M.D.
?InitialiseString("MORRIS ART & ANNE")
M.A.A.