我刚刚继承了一个工作人员数据库,几年来没有碰过这个数据库,他们希望我能够使其正常运行。我已经能够更新大多数内容,但是我遇到了使用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语句正常工作的方式提供的任何帮助都将有所帮助。
答案 0 :(得分:1)
发布的代码不是宏,而是VBA。 Access中的宏非常不同。
用户不应与表和查询进行交互,而应与表单和报表进行交互。
在“访问是/否”字段中,0
是False
,而-1
是True
。
考虑:
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的复选框,就不需要任何代码。