2017-06-13 67 views
0

我在格式化这样的访问有一个字段:洛杉矶,CA#00001避免#Func!错误Access查询

我需要修改的文本字段看起来像这样:#001 - 洛杉矶,CA

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

"#" & 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 | 
+------------------------+------------------------+ 

回答

1

您只需追加"#"到字符串的结尾寻找一个"#"之前使用InStr

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

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

+0

这正是我正在寻找的。非常感谢! – Darren

1

你可以有一个函数返回格式化的值,如果#不存在,返回原始值。

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