Excel 在出现警告消息框之前,是否有方法检测使用VBA建立数据连接是否失败?

Excel 在出现警告消息框之前,是否有方法检测使用VBA建立数据连接是否失败?,excel,ms-access,vba,Excel,Ms Access,Vba,我担心的是,我要连接的文件中存在读写锁,因为应用程序正在使用该文件,如图所示: 当我尝试刷新MS Excel中的数据连接时,会出现以下错误/通知,因为它无法连接到正在使用的MS Access文件: 我想知道VBA是否有办法检测建立数据连接是否失败。我不知道如何处理它,刷新查询的VBA代码如下所示: With ActiveWorkbook.Connections("Query - MS Access File") .OLEDBConnection.BackgroundQuery

我担心的是,我要连接的文件中存在读写锁,因为应用程序正在使用该文件,如图所示:

当我尝试刷新MS Excel中的数据连接时,会出现以下错误/通知,因为它无法连接到正在使用的MS Access文件:

我想知道VBA是否有办法检测建立数据连接是否失败。我不知道如何处理它,刷新查询的VBA代码如下所示:

With ActiveWorkbook.Connections("Query - MS Access File")
    .OLEDBConnection.BackgroundQuery = False
    .Refresh
End With
我的Excel数据连接到Access文件的连接字符串如下所示:

Provider=Microsoft.ACE.OLEDB.12.0;
User ID=Admin;
Data Source=C:\Users\ACER\Desktop\Test.MDB;
Mode=Share Deny Write;
Extended Properties="";
Jet OLEDB:System database="";
Jet OLEDB:Registry Path="";
Jet OLEDB:Engine Type=5;
Jet OLEDB:Database Locking Mode=0;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;
Jet OLEDB:Support Complex Data=False

您应该尝试使用方法
state
检查您的连接:

if ActiveWorkbook.Connections("Query - MS Access File").OLEDBConnection.State <> 1 then
   ' Your connection is not ready
end if
如果ActiveWorkbook.Connections(“查询-MS访问文件”).OLEDBConnection.State为1,则
'您的连接尚未准备就绪
如果结束

在VBA中,
.IsConnected
是一个布尔属性,其工作原理如下:

如果ActiveWorkbook.Connections(“查询-MS访问文件”).OLEDBConnection.IsConnected已连接,则

按Ctrl+Space并查找有意义的内容,有助于查看VBA内置库:


谢谢@Vityala我从C#获取了代码,但忘了转换为VB@kiks73-不客气。但是,
ConnectionState.Open
也是一个.net选项。在VBA中,常量仅为
1
-@kiks73感谢您的回答,尽管我得到了
运行时错误438:对象不支持此属性或方法
错误。我使用的代码是:
If(ActiveWorkbook.Connections(“Query-Test”).OLEDBConnection.State ConnectionState.Open)然后MsgBox“连接失败”结束If
@Pherdindy-请看上面评论中的答案,它写得很好。@kiks73错误一定在
.OLEDBConnection.State
中的某个地方,我仍然收到相同的错误。是否有我应该检索的类或模块?在
对象浏览器的
OLEDBConnection
类中
没有名为
State的成员
谢谢,除了
F2
之外,我从来不知道内置库的快捷方式。尽管我担心的是:我在
Workbook.Open()
方法中有一个刷新代码,用于刷新所有数据连接。默认情况下,当我打开它时,所有东西都没有连接,我想知道VBA是否有可能在所有警告消息框出现之前捕捉到建立连接失败。因此,我可以这样做:
如果连接失败,则使用此替代方法进行连接。我有一个VBA替代方案来绕过故障,但速度要慢得多