vba - MS Access VBA - 循环拆分函数并输出第一个值(如果不是空)或最后一个值
问题描述
我的 Access 数据库中有一个字段,其中包含、 、24,25,152
和128,152
NULLS等值。,113
113
当字段中只有一个值时,我希望第一个值作为我的输出(113
for ,113
and 113
),当存在多个值时,我希望最后一个值作为我的输出(152
for 24,25,152
and 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
查看1
、2
和3
列的嵌套语句。我知道我需要修改此代码以计算分隔符,然后遍历每个分隔符并获取第一个值(如果只有一个)和最后一个值(如果有多个),但我不知道如何去实现它。
任何帮助将不胜感激。
编辑
解决方案
试试这个。
只需拆分值并返回数组中的最后一个元素。如果值为 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
推荐阅读
- linux - 如何验证 shell 脚本中文件的第一个字符?
- laravel - phpunit : 测试 api 并在同一个控制器中模拟一些方法,但模拟的方法不起作用
- ruby-on-rails - 无法预编译资产
- android - 上传到 Play 商店后,签名的密钥库哈希值不同
- python - 将 AWS cli 更新到最新版本时出错
- python - 返回完美平方的计数
- c - 将内存分配给 typedef 的指针
- reactjs - 如何使用 react-testing-library 在同一测试中测试不同类型的 Apollo 客户端错误?
- node.js - 在 ubuntu 20.04 上使用 Apache 设置 Node.js 应用程序时无法访问 api
- python-3.x - Python 3 print([1, 2] and 3) 输出 3