拆分:下标必须在 1 和数组大小之间

Split: A subscript must be between 1 and the size of the array

我有一个超级简单的公式。问题是有时数据没有第二个值,或者有时该值是空白的。

Split ({PO_RECEIVE.VENDOR_LOT_ID}," ")[2]

ID
111 222
123

123 222

我在想,如果我能想出一些逻辑来弄清楚字符串是否有多个值,它会解决我的问题,但还没找到我要找的东西:

If {PO_RECEIVE.VENDOR_LOT_ID} = SingleOrBlankString then 
{PO_RECEIVE.VENDOR_LOT_ID} else
Split ({PO_RECEIVE.VENDOR_LOT_ID}," ")[2]

更好的示例数据:

3011111*42011111111
2711 00291111111

711111//12111111111
/J1111 69111111111
170111

如果字符串最多可以包含两个值,用 space 分隔,那么您可以使用 InStr 函数检查字符串是否包含 space

If InStr({PO_RECEIVE.VENDOR_LOT_ID}, " ") > 0 Then
    {PO_RECEIVE.VENDOR_LOT_ID}
Else
    Split ({PO_RECEIVE.VENDOR_LOT_ID}," ")[2]

如果部分之间可以有多个 space,您可以使用以下公式来获取值:

左边部分:

这个函数returns字符串的左边部分直到第一个space。

If InStr({PO_RECEIVE.VENDOR_LOT_ID}, " ") > 0 Then
    Left({PO_RECEIVE.VENDOR_LOT_ID}, InStr({PO_RECEIVE.VENDOR_LOT_ID}, " "))

右边部分:

这个函数returns最后一个space之后字符串的右边部分。

  • InStrRev-函数 returns 最后一个 space 的位置,因为它向后搜索字符串。
  • Len-函数returns字符串的长度。
  • [长度] - [最后的位置 space] = [右侧部分的长度]


If InStr({PO_RECEIVE.VENDOR_LOT_ID}, " ") > 0 Then
    Right({PO_RECEIVE.VENDOR_LOT_ID}, Len({PO_RECEIVE.VENDOR_LOT_ID}) - InStrRev(testString, " "))