访问VBA SendKeys替代

时间:2018-11-26 07:36:44

标签: sql vba ms-access access-vba

我刚刚继承了一个工作人员数据库,几年来没有碰过这个数据库,他们希望我能够使其正常运行。我已经能够更新大多数内容,但是我遇到了使用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语句,但不确定在何条件下更新需要更新的单个单元格(在这种情况下,在任何给定时间仅一个问题员工的PastEmployee单元格就需要更新为True而不是False)。在宏中,它引用(通过FindRecord命令)一个ComboBox,在该ComboBox中选择了从雇员表中查询姓氏,名字和雇员编号的雇员。

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

以使SendKeys命令正常工作或使update语句正常工作的方式提供的任何帮助都将有所帮助。

1 个答案:

答案 0 :(得分: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的复选框,就不需要任何代码。