访问 VBA SendKeys 替代方案

Posted

技术标签:

【中文标题】访问 VBA SendKeys 替代方案【英文标题】:Access VBA SendKeys alternative 【发布时间】:2018-11-26 07:36:43 【问题描述】:

我刚刚在工作中继承了一个几年未动过的人事数据库,他们希望我让它发挥作用。我已经能够更新大部分内容,但我遇到了使用 SendKeys 操作输入的宏的问题:

Private Sub Command3_Click() 
On Error GoTo Err_Command3_Click 

  DoCmd.OpenTable "tblEmployees", acNormal, acEdit
  DoCmd.GoToControl [employee]
  DoCmd.FindRecord Forms![EmployeeRemoval]![cboEmpSelect], 
  DoCmd.GoToControl [pastemployee]
  SendKeys "1~", True
  DoCmd.Close acTable, "tblEmployees"

Exit_Command3_Click: 
Exit Sub 

Err_Command3_Click: 
  MsgBox Err.Description 
  Resume Exit_Command3_Click 

此时使用 Access 2010,它只是将程序发送到一个循环中,打开和关闭表格,同时打开和关闭 Num Lock。我认为最好的替代方法是 Update 语句,但不确定更新需要更新的单个单元格的 Where 标准是什么(在这种情况下,在任何给定时间只有一个有问题的员工的 PastEmployee 单元格需要更新为 True 而不是 False)。在宏中,它引用(通过 FindRecord 命令)一个 ComboBox,其中选择了从员工表中查询姓氏、名字和员工编号的员工。

db.Execute Update tblEmployees Set [PastEmployee] = 1 Where XXXXXXXX

在使 SendKeys 命令正常工作或使更新语句正常工作方面的任何帮助都会有所帮助。

【问题讨论】:

这是什么意思?狡猾的错误处理程序是否引入了问题? 【参考方案1】:

贴出的代码不是宏,是VBA。 Access 中的宏非常不同。

用户不应与表格和查询进行交互,而应仅与表单和报告进行交互。

在访问是/否字段中,0False-1True

考虑:

Private Sub Command3_Click() 
    On Error GoTo Err_Command3_Click 

    CurrentDb.Execute "UPDATE tblEmployees SET PastEmployee=True WHERE employee=" & Me.cboEmpSelect

Exit_Command3_Click: 
    Exit Sub 

Err_Command3_Click: 
    MsgBox Err.Description 
    Resume Exit_Command3_Click
End Sub

如果表单绑定到 tblEmployees 并专注于要编辑的记录,而不是 UPDATE 操作,只需:Me!PastEmployee = True。虽然,如果在表单上查看记录,用户只需单击绑定到 PastEmployee 的复选框,不需要任何代码。

【讨论】:

在尝试更新语句时,它给我一个数据类型不匹配的标准表达式错误。我没有机会尝试 Me!PastEmployee=True,但这可能是解决手头问题的更简单方法。试一试后,我会回来查看。 Employee 的数据类型是什么? cboEmpSelect 的值是多少 - 数字还是文本? PastEmployee 是否为“是/否”字段? 员工是数字,cboEmpSelect 报告文本(导出姓、名),但同时查询文本和数字(员工和关联的姓、名)。 PastEmployee 是一个是/否字段。 那么这就是“类型不匹配错误”的来源。需要组合框具有员工编号但显示名称的值。不要在过滤条件中使用带有数字字段参数的撇号分隔符。

以上是关于访问 VBA SendKeys 替代方案的主要内容,如果未能解决你的问题,请参考以下文章

.NET(C#) SendKeys模拟键盘按键不生效使用WinAPI的替代方案

是否有适用于 Windows 10 的 SendKeys 类的替代方案

是否存在“SendKeys”的快速且可预测的替代方案?

Citrix Xenapp - 发送密钥

VBA - 使用 Sendkeys 复制粘贴代码

在windows 7 下Excel 2007 VBA中的命令SendKeys有时会无效?