避免#Func!访问查询中的错误

时间:2017-06-13 18:22:35

标签: ms-access ms-access-2010

我在Access中有一个格式如下的字段:洛杉矶,CA#00001

我需要修改文本字段,如下所示:#001 - 洛杉矶,加利福尼亚州

要做到这一点,我使用这个公式:

 "#" & Format([STORE NUMBER],"000") & " - " & Trim(Left([STORE NAME],InStr(1,[STORE NAME],"#")-1))

我遇到的问题是我的数据集中的每条记录都没有格式化。有几个实例的位置名称是: "加州测试商店"。

如果是这种情况,我会得到一个" #Func!"错误,可能是因为没有"#"签署以寻找应用公式。

任何人都可以帮助找到解决方法以避免此错误。

理想情况下,我希望如果输出确实产生" #Func!"错误,只是像这样使用原始名称:

+------------------------+------------------------+
|        Original        |          New           |
+------------------------+------------------------+
| Los Angeles, CA #00001 | #001 - Los Angeles, CA |
| Test Store for CA      | Test Store for CA      |
| San Diego, CA #00002   | #002 - San Diego, CA   |
+------------------------+------------------------+

2 个答案:

答案 0 :(得分:2)

您可以让函数返回格式化值,如果#不存在,则返回原始值。

Public Function SplitStore(ByVal value_ As String) As String

    If InStr(1, value_, "#") = 0 Then
        SplitStore = value_
        Exit Function
    End If

    Dim arr As Variant
        arr = Split(value_, "#")

    SplitStore = "#" & Format(arr(1), "000") & " -" & arr(0)
End Function

要打电话:

SELECT SplitStore([STORE NUMBER]) As FormattedStore
...


'#001 -Los Angeles, CA 

答案 1 :(得分:2)

在使用"#"搜索"#"之前,您只需在字符串的末尾添加InStr

"#" & Format([STORE NUMBER],"000") & " - " & Trim(Left([STORE NAME],InStr(1,[STORE NAME]&"#","#")-1))

如果"#"已存在,InStr将找到现有位置。如果一个不存在,则InStr(1,[STORE NAME]&"#","#")-1将返回[STORE NAME]的长度,因此Left将返回整个字段。