工作中常用方法的总结,欢迎指点或者提问题,希望能对大家有帮助
不显示警告框
DoCmd.SetWarnings False ` 关闭默认警告框
` 此处写不需要显示警告框的操作
DoCmd.SetWarnings True ` 开启默认警告框
Try-catch
实际上 vba 没有专门的 try-catch 语句,一般这么写:
On Error GoTo Err_close `关闭默认的异常处理,开启自定义异常处理
` 需要 try 的语句,发生异常执行异常处理过程
On Error GoTo 0 ` 关闭自定义异常处理,开启默认的异常处理
Exit Sub ` 或者end sub,不写会继续执行后面的异常处理过程
Err_close:
` 异常处理过程
非引用方式执行SQL 语句(非DAO,ADO)
优势:不用连接数据库
缺点:DoCmd.RunSQL 只用于 INSERT、DELETE、UPDATE 语句,没有返回值
SQL = "DELETE * FROM 表名 WHERE [字段名] = '" & staff_id & "'"
DoCmd.RunSQL SQL
数据表窗体(已绑定数据源)筛选数据
strWhere = "[字段名] like '" & 值 & "'"
Me.table.Form.Filter = strWhere
Me.table.Form.FilterOn = True
将窗体(已绑定数据源)输入框、下拉框中编辑后的数据撤销
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
将窗体(已绑定数据源)输入框、下拉框中编辑后的数据更新到表中
因为默认窗体关闭的时候才会把数据更新到表中,可以直接刷新解决
Forms("窗体名").Refresh ` 其实就是执行了一个刷新
焦点定位到数据表窗体 / 窗体(已绑定数据源)的某一条数据
Forms("窗体名").SetFocus
DoCmd.GoToControl "字段名"
DoCmd.FindRecord "字段值"
刷新数据表窗体 / 窗体(已绑定数据源),显示已添加和修改的数据
Forms("窗体名").Requery
跳转到数据表窗体 / 窗体(已绑定数据源)的某一条数据
用 DoCmd.GoToRecord,例子是跳转到添加新数据页。
Me.table.SetFocus
DoCmd.GoToRecord acActiveDataObject, , acNewRec
[详见官网](Access (DoCmd.GoToRecord) | Microsoft Docs)
判断窗体是否已经打开
CurrentProject.AllForms("窗体名").IsLoaded = True
打开窗体,传参并定位到某条数据
DoCmd.OpenForm "窗体名"
DoCmd.OpenForm "窗体名", , , "[字段名]='" & Id & "'"
DoCmd.OpenForm "窗体名", , , "[字段名]='" & Id & "'",,,"参数(可以是各种类型对象)"
[详见官网](DoCmd.OpenForm 方法 (Access) | Microsoft Docs)
窗体接收参数方式(不仅仅限于窗体的 load 等事件中):
Me.OpenArgs
Access 文件过大
例子:我数据已经清除但文件有没有变小,是因为删除数据后没有真正的释放空间,需要做下图操作

关闭当前 Access
两种:
Application.Quit acQuitPrompt
DoCmd.Quit acQuitPrompt
计算表中有多少条符合条件的数据
num = DLookup("COUNT([字段名])", "表名", "[字段名] = '" & 条件 & "'")
修改表中数据
添加DAO引用
CurrentDb.Execute ("Update 表名 set 字段名='值' where 字段名='Karius'")
定位到表中某条数据(表中无主键)
Set rst = CurrentDb.OpenRecordset("SELECT * FROM 表名 WHERE 字段名='" & 值 & "'")
Do While Not rst.EOF
If rst![字段名] = “111” Then
(执行语句)
End If
Exit Do
rst.MoveNext
Loop
定位到表中某条数据并修改(表中有主键)
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("表名")
rst.Index = "PrimaryKey"
rst.Seek "=", 值
rst.Edit
rst![字段名] = 值
rst.Close
网友评论