【问题标题】:Write from Excel to Access multicolumn combobox field using VBA使用 VBA 从 Excel 写入访问多列组合框字段
【发布时间】:2019-07-29 18:44:24
【问题描述】:

我有一个包含两个表的 Access 文件:用户和产品。用户保留一个可以写入 Access 文件的列表(用户 ID、系统 ID、名称等字段)。产品会保留一份产品属性列表,包括谁对记录进行了最后更新。最后一个更新字段是一个包含两列的组合框:userID(绑定到此)、名称(由于列宽为 0";2" 而显示此)。

我还有一个名为模拟器的 Excel 文件。模拟器使用 VBA 从产品表中读取数据,使用各种预测算法来模拟产品的未来,然后将预测写回 Access。

当Excel回写产品记录时,我想记录最后一次更新作者为模拟器。假设这个用户存在(userID=100,name=Simulator,比如说),我该怎么做?

我现在有

' Open Access database, get products table, get product record
connection.Open ...
products.Open "Products", connection, ...
products.Filter = "ProductID = " & productNumber

' Update record
products("LastUpdateAuthor") = "100; Simulator"
products.Update
products.Close

这会将“100;模拟器”写入正确的字段。如何让它识别出 100 是绑定列,而 Simulator 是第二列?

【问题讨论】:

  • 我认为需要对表格设计有更多的了解。请给出 Product 表中的记录示例,包括字段名称。不清楚userID 字段是如何关联的。

标签: excel vba ms-access


【解决方案1】:

应该只将用户 ID 保存到 LastUpdateAuthor 字段中。那么多列组合框RowSource应该是Users表的SQL语句,以便检索和查看相关的UserName。因此,在用户 ID 为 100 且名称为 Simulator 的用户中记录,然后仍然只需保存用户 ID。

只要 RowSourceType 是 Table/Query,它就会将 100; Simulator 值视为 LastUpdateAuthor 字段中的单个字符串。可以将组合框 RowSourceType 设置为 ValueList,然后使用代码操作记录集和 Add 方法将 LastUpdateAuthor 数据加载到 RowSource,分号将被识别为列分隔符。但是,如果您按照第一段所述进行操作,则没有必要这样做。

【讨论】:

  • ...假设设计得当
  • 是的,你完全正确。这是我几个小时前尝试的第一件事,但我保存了 UserID,而我的 SQL 语句使用了 SystemID。一旦我保存了 SystemID,它就像我预期的和你描述的那样工作。我的一个小错误,很多额外的工作。典型调试sigh.
猜你喜欢
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
相关资源
最近更新 更多