我到处找这个,我找不到它;我看了看ADO和DAO。
有没有办法使用 VBA 编辑另一个.mdb
文件中表单上组合框的行源属性? 我必须在一堆.mdb
文件上进行此更改,我宁愿使用脚本来执行此操作,而不是一次执行一个。
使用 COM 自动化创建一个 Access 应用程序会话,您可以在其中打开数据库,在设计模式下打开目标窗体,然后更改目标组合框的行源。
Public Sub AlterComboRowSource(ByVal pDb As String, _
ByVal pForm As String, _
ByVal pCombo As String, _
ByVal pRowSource As String, _
Optional ByVal pEdit As Boolean = False)
Dim objAccess As Access.Application
Dim frm As Form
Dim cbo As ComboBox
Set objAccess = New Access.Application
objAccess.Visible = True '<- useful while debugging
objAccess.OpenCurrentDatabase pDb, True
objAccess.DoCmd.OpenForm pForm, acDesign
Set frm = objAccess.Forms(pForm)
Set cbo = frm.Controls(pCombo)
Debug.Print cbo.RowSource
If pEdit = True Then
cbo.RowSource = pRowSource
objAccess.DoCmd.Close acForm, pForm, acSaveYes
End If
objAccess.Quit acQuitSaveNone
End Sub
这是我的测试过程,它演示了如何使用第一个过程:
Public Sub test_AlterComboRowSource()
Const cstrCombo As String = "cmbEmployeeName"
Const cstrForm As String = "frmLogin"
Dim strDbPath As String
Dim strSelect As String
strDbPath = "C:UsershansDocumentsAccessScratch.accdb"
strSelect = "SELECT e.EmployeeID, e.FirstName & ' ' & e.LastName AS [Employee Name] " & _
"FROM tblEmployees AS e " & _
"WHERE e.Inactive=False ORDER BY 2;"
AlterComboRowSource strDbPath, cstrForm, cstrCombo, strSelect, True
End Sub
当我在 Access 2010 中测试这些过程时,这些过程按预期工作。
只执行一次Set objAccess = New Access.Application
,然后重用objAccess
,打开每个数据库,更改组合行源,然后关闭数据库,应该更有效。
但是,由于这可能是一次性情况,因此您可能不太关心执行速度。