如何从单个文本框中获取每个单词的首字母

时间:2019-02-24 16:06:43

标签: ms-access access-vba

请帮助我进行此查询。

我正在使用MS Access数据库,请提供VBA代码帮助。

我有一个名为[CUSTOMER NAME]的文本框,其中的数据如下:

  • "JONES CLARENCE J"
  • "MORRIS D"
  • "MORRIS ART & ANNE"

我想将这些名字的缩写写到另一个文本框中,如下所示:

  1. "JONES CLARENCE J""J.C.J."
  2. "MORRIS D""M.D."
  3. "MORRIS ART & ANNE""M.A.A."

预先感谢

1 个答案:

答案 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.