从Word VBA访问Access RecordSet时,我无法阻止显示Access Application窗口。
我在Word中有VBA代码,可以从SQL创建一个Access RecordSet,操纵RecordSet,然后关闭数据库。我已经使用了Application.ScreenUpdating = False并设置了Access数据库对象.Visible = False,但是当代码运行时,Access Application窗口会在屏幕上保持闪烁一会儿。
代码片段:
Dim acc as Access.Application
Dim db as Database
Dim rst as Recordset
Application.ScreenUpdating = False
Set acc = New Access.Application
With acc
.Visible = False
.OpenCurrentDatabase stAccPath
Set db = .CurrentDb
Set rst = db.OpenRecordset(stSQL)
此处用于处理记录集的其他代码。
.Quit
End With
set rst = Nothing
Set acc = Nothing
Application.ScreenUpdating = True
我要执行的是在执行此代码时使Access在后台隐形运行,但是实际上,Access Application窗口在消失之前会在屏幕上显示一秒钟。
答案 0 :(得分:1)
如果代码不需要在Access环境中与用户交互,那么最好根本不打开数据库。而是使用ADO连接直接从数据存储中检索数据,而不是在Access中打开数据库。这样不仅可以避免处理(不需要的)Access应用程序窗口的问题,而且速度更快。
下面是一些用于连接到Access数据库的示例代码(同时提供了mdb和accdb连接字符串)。
Sub AdoConnectAccess()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sConn As String, sSQL As String
'sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb"
'sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.mdb"
sSQL = "SELECT * From [Table Name]"
Set conn = New ADODB.Connection
conn.ConnectionString = sConn
conn.Open
Set rs = conn.Execute(sSQL)
rs.MoveFirst
Debug.Print rs.RecordCount, rs.Fields.Count
Do While Not rs.EOF
Debug.Print rs.Fields("Vorname").value
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
End Sub