首页 > 解决方案 > MS Access VBA - 循环拆分函数并输出第一个值(如果不是空)或最后一个值

问题描述

我的 Access 数据库中有一个字段,其中包含、 、24,25,152128,152NULLS等值。,113113

当字段中只有一个值时,我希望第一个值作为我的输出(113for ,113and 113),当存在多个值时,我希望最后一个值作为我的输出(152for 24,25,152and 128,152)。

现在我有一个用户定义的函数,该函数由一个查询调用,该查询已被硬编码以说明字段中存在的正确数量的逗号/值。将来会有更多的逗号,所以我想解释这些,我希望我的输出在一个列中(而不是在每个逗号之后每个值都有一列)。

这是来自这篇文章的用户定义函数的 VBA 代码。

Function mySplit(sMyText As String, sDelim As String, lIndx As Long) As String
    On Error GoTo Error_Handler

    mySplit = Split(sMyText, sDelim)(lIndx)

Error_Handler_Exit:
    On Error Resume Next
    Exit Function

Error_Handler:
    If Err.Number = 9 Then
        mySplit = ""
    Else
        MsgBox "The following error has occured" & vbCrLf & vbCrLf & _
               "Error Number: " & Err.Number & vbCrLf & _
               "Error Source: mySplit" & vbCrLf & _
               "Error Description: " & Err.Description & _
               Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
               , vbOKOnly + vbCritical, "An Error has Occured!"
    End If
    Resume Error_Handler_Exit



End Function

这是查询:

SELECT Field, mySplit([field].[table],",",0) AS 1, mySplit([field].[table],",",1) AS 2, mySplit([field].[table],",",2) AS 3, Val(IIf([3]<>"",[3],IIf([2]<>"",[2],IIf([1]<>"",[1])))) AS [Value]

FROM Table;

理想情况下,我希望有一个类似于下图中的“值”字段(以绿色勾勒)的字段。

现在,该值字段是一组if查看123列的嵌套语句。我知道我需要修改此代码以计算分隔符,然后遍历每个分隔符并获取第一个值(如果只有一个)和最后一个值(如果有多个),但我不知道如何去实现它。

任何帮助将不胜感激。

编辑

在此处输入图像描述

标签: vbams-access

解决方案


试试这个。

只需拆分值并返回数组中的最后一个元素。如果值为 null,则返回一个空字符串。

Public Function SplitToLast(Value As Variant) As String
    On Error GoTo Trap

    If IsNull(Value) Then GoTo Leave

    Dim arr As Variant
        arr = Split(Value, ",")

    SplitToLast = arr(UBound(arr))

Leave:
    On Error GoTo 0
    Exit Function

Trap:
    MsgBox Err.Description, vbCritical
    Resume Leave
End Function

推荐阅读