使用从 VBA 代码派生的值填充表中的字段

Posted

技术标签:

【中文标题】使用从 VBA 代码派生的值填充表中的字段【英文标题】:Populating field(s) in a table with values derived out of VBA code 【发布时间】:2013-04-19 12:36:41 【问题描述】:

我找到了一些neat code(实际上是通过here)来获取当前登录到Windows的用户的用户名。

假设我有一张名为AdminEntry 的表。我希望将AdminEntry 表设置为表单的记录源,以便用户通过表单在该表上输入数据。然后他们创建并完成数据输入的任何记录也会在该记录上标记他们的用户名,以便我们可以跟踪属于谁的内容。

不确定我将如何将该用户名字符串推送到表中,或者最好的方法。

如果AdminEntry 表有以下字段:

| UserName | Field1 | Field2 |
|          |        |        |

用户只需使用表单在Field1Field2 上进行数据输入:

| UserName | Field1 | Field2 |
|          |  data  |  data  |

然后,Save 按钮上的事件可能会将用户名字符串拉入UserName 字段并在将完整记录保存到AdminEntry 表之前:

| UserName | Field1 | Field2 |
|   data   |  data  |  data  |

虽然不知道如何通过该用户名字符串提取,所以希望得到一些帮助/指针!

【问题讨论】:

【参考方案1】:

将文本框txtUserName 添加到表单并将其绑定到UserName 字段。您可以将文本框的.Visible 属性设置为No

然后将来自该fOSUserName() 函数的值从表单的更新前事件分配给txtUserName。注意更新前也与表单插入一起发生,因此这种方法将在您添加新记录和修改现有记录时存储当前用户名。

Private Sub Form_BeforeUpdate(Cancel As Integer)
    ' Me.txtUserName = CreateObject("WScript.Network").UserName
    Me.txtUserName = fOSUserName
End Sub

【讨论】:

感谢@HansUp,效果很好!对于其他阅读者:不要做我最初做的事情并将txtUserName文本框的控制源绑定到=[UserName];确保它只是[UserName] 否则它将无法接受来自其他任何地方的条目(并且会弹出错误)。快速提问:您注释掉的代码是否只是一种无需通过fOSUserName 方法即可获取用户名的更简单/替代方式? 是的,CreateObject("WScript.Network").UserName 出现在我的原始代码中。我替换了fOSUserName,因为我认为你想要那个。但是我留下了"WScript.Network",以防其他读者感兴趣。无论哪种方式都可以正常工作。 @MattHall FWIW,我会推荐 WScript.Network 方法,因为您的问题中引用的旧代码使用 32 位 Windows API 调用,并且几乎可以肯定它不会像所写的那样在 64 位 Access 中编译.可能有一些方法可以让它运行,但使用避免直接引用 32 位 Windows API 函数的方法会更容易。

以上是关于使用从 VBA 代码派生的值填充表中的字段的主要内容,如果未能解决你的问题,请参考以下文章

VBA使用Len公式中的值填充列

Excel VBA如何填充不同工作表中的值

使用 MS Access 和 VBA 更新 Ms Word 文档中的(字段代码:数据库)字段

如何通过vba查看访问表中的记录集?

jtable仅使用链表中的值填充一行

从vba中的表填充列表框