请帮助我进行此查询。
我正在使用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."
预先感谢
答案 0 :(得分:3)
您可以利用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.