从Word VBA查询时如何保持访问窗口不可见

时间:2019-01-06 04:58:38

标签: vba ms-access ms-word

从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窗口在消失之前会在屏幕上显示一秒钟。

1 个答案:

答案 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