Как сохранить окно доступа невидимым при запросе из Word VBA - PullRequest
0 голосов
/ 06 января 2019

Я не могу удержать окно приложения доступа от отображения при доступе к Access RecordSet из Word VBA.

У меня есть код VBA в Word, который создает Access RecordSet из SQL, манипулирует RecordSet, а затем закрывает базу данных. Я использовал Application.ScreenUpdating = False и установил объект базы данных Access .Visible = False, но окно приложения Access продолжает мигать на экране некоторое время, когда выполняется код.

Фрагмент кода:

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 выполнялся незаметно в фоновом режиме при выполнении этого кода, но на практике на мгновение перед тем, как исчезнуть, на экране появляется окно приложения доступа.

1 Ответ

0 голосов
/ 06 января 2019

Если коду не нужно взаимодействовать с пользователем в среде 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...