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

问题描述 投票:-1回答:1

请帮我解决这个问题。

我正在使用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."

提前致谢

ms-access access-vba
1个回答
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.
© www.soinside.com 2019 - 2024. All rights reserved.