【问题标题】:Checking if values from table match the values in ArrayList and showing them in next form检查表中的值是否与 ArrayList 中的值匹配并以下一个形式显示它们
【发布时间】:2021-11-01 12:34:41
【问题描述】:

我正在尝试检查表的一列中的记录是否与 ArrayList 的至少一个值匹配,如果是,则显示在下一个表单中匹配的记录

我有一个充满字符串的 ArrayList,但我不知道如何检查表中的记录并将其插入下一种形式的文本框,其中一列的至少一个记录数据与 ArrayList 中的一个值匹配。

这不起作用:

Public Sub Command42_Click()
   
   Dim NotTrained As ArrayList
   Set NotTrained = New ArrayList
   NotTrained.Add "value1"
   NotTrained.Add "value2"

   DoCmd.OpenForm "form_name", WhereCondition:=NotTrained.Contains(handover_No) = True

End Sub

我不知道我是否能够在 WhereCondition 中执行此操作,或者我需要打开下一个表单并将数据插入 NextForm.Load() Sub 的文本框中。

在下一个表单中,文本框将源代码控制设置为我希望从中获取记录的表中的列。

【问题讨论】:

  • 您的问题不清楚。 “显示那些在下一个表格中匹配的记录”是什么意思?如果“将表格中的记录插入到下一个表单的文本框中”,基于什么来做到这一点?填充特定字符串的文本框之间存在什么关联?请编辑您的问题并澄清这个问题,否则,恐怕没有人可以帮助您以您提出问题的方式......
  • handover_No 是表中列的名称。例如,如果其中一条记录在 handover_No 列中的值为 value1,则在单击时打开的下一个表单中,它将显示有关匹配的记录的其他信息,如姓名 surname 和将源代码控制设置为这些列的文本框中的 handover_No在那张桌子上。抱歉不清楚
  • 使用字符串作为过滤/选择记录的手段在数据库中效率不高。使用记录的自动编号主键要好得多。我不确定你为什么要建立一个 ArrayList - 看看在 ID 号的 CSV 列表上使用 .OpenForm 操作的 WHERE 条件 - DoCmd.OpenForm "frmShip",,,"ShipID IN(10,11,12)"
  • 好的,我得到了您的建议,我对其进行了一些更改,现在它基于 ID 而不是字符串工作。有什么方法可以让我有这样的代码DoCmd.OpenForm "frmShip",,,"ShipID IN(ArrayList)" 而不是这个DoCmd.OpenForm "frmShip",,,"ShipID IN(10,11,12)"
  • 不,您必须从 ArrayList 创建 ID 列表。但是你为什么首先创建 ArrayList - 创建 ID 列表而不是 ArrayList 可能更容易。

标签: vba ms-access arraylist contains


【解决方案1】:

部分解决方案是:

您可以像这样遍历范围单元格并在 Arraylist 中查找现有的单元格

Public Sub Command42_Click()
   Dim NotTrained As ArrayList
   Set NotTrained = New ArrayList
    Dim I As Long, LR As Long
    Dim rng As Range
   NotTrained.Add "value1"
   NotTrained.Add "value2"

  LR = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
   Set rng = Range("A1")
   For I = 0 To LR
   If NotTrained.IndexOf(rng.Offset(I, 0).Value, 0) = -1 Then
        ' the value is not in ArrayList
       ' Do Something
    Else
       ' the value is in ArrayList
'      Do Something Else
   End If
   Next I
   'DoCmd.OpenForm "form_name", WhereCondition:=NotTrained.Contains(handover_No) = True

End Sub

我不知道你的表格是什么结构,所以我不能建议你如何填写。

【讨论】:

  • 我在这方面有点初学者,所以我的表单结构是什么意思
  • @xShen 您为Excel 提供了答案,但OP 正在寻找MS-Access 解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
相关资源
最近更新 更多