我正在制作一个简单的表格来填写表格。其中一个字段是包含一些 ID,可以是单个 ID,也可以是范围 ID,例如:“65,73,99-114”,以逗号和破折号作为分隔符。我需要 Access 在另一个表中查找此 ID,并将其他列中的一些数据提供到目标表中。这应该在提交表单时完成。虽然这个任务听起来很简单,而且我知道一点 C# 和 js,但这是我第一次受到 VBA 的挑战。我从未处理过此类应用程序和手册,我发现这些应用程序和手册过于模糊和/或离题。基本上,我需要知道从什么开始以及一些一般提示,但欢迎您提供任何高级帮助。ps 访问 2016
问问题
886 次
1 回答
3
没有什么能阻止您编写一些代码来“解析”给定文本并创建所需的 SQL。这样的代码在 C# 或 VBA 中的外观并不是真正困难的部分。真正的挑战是编写代码来解析。(编写代码!-方法与我 c# 中的方法大致相同)。
我只是对它进行了空气编码,它看起来工作得很好。此代码假定有问题的列是数字列(因此每个值都不需要引号)。
代码如下所示:
Function MyWhereRanges(strRanges, strField As String) As String
' take the raganges, and return a where clause
Dim vTokens As Variant
Dim strRa As String ' sql for ranges
Dim strIn As String ' sql for "in" clause
Dim s As Variant
Dim strResult As String ' return value
vTokens = Split(strRanges, ",")
For Each s In vTokens
If InStr(s, "-") Then
' this is a range - append the range
If strRa <> "" Then
strRa = strRa & " and "
End If
strRa = strRa & "(" & strField & " between " & _
Split(s, "-")(0) & " and " & Split(s, "-")(1) & ")"
Else
' append to the "in" clause
If strIn = "" Then
strIn = "(" & strField & " in ("
Else
strIn = strIn & ","
End If
strIn = strIn & s
End If
Next s
If strIn <> "" Then strIn = strIn & ")) "
strResult = strIn
If strRa <> "" Then
If strResult <> "" Then strResult = strResult & " and "
strResult = strResult & strRa
End If
MyWhereRanges = strResult ' return the value
End Function
因此,在调试窗口中,您可以输入:
? mywhereranges("5,6,12-13,15-25","InvoiceNum")
上面的结果是这样的:
(InvoiceNum in (5,6)) and
(InvoiceNum between 12 and 13) and
(InvoiceNum between 15 and 25)
因此,在实际表单中,您可以像这样启动报告或表单:
Dim strSQLwhere As String
strSQLwhere = MyWhereRanges(Me.txtBoxRanges, "InvoiceNum")
DoCmd.OpenReport "rptInvoices", acViewPreview, , strSQLwhere
于 2016-03-01T01:42:10.240 回答