有没有办法在出现警告消息框之前检测是不是使用 VBA 建立数据连接失败?

Posted

技术标签:

【中文标题】有没有办法在出现警告消息框之前检测是不是使用 VBA 建立数据连接失败?【英文标题】:Is there a way to detect if establishing a data connection has failed using VBA before the warning message boxes appear?有没有办法在出现警告消息框之前检测是否使用 VBA 建立数据连接失败? 【发布时间】:2018-09-10 09:26:58 【问题描述】:

我担心我要连接的文件中有一个读写锁,因为它正在被应用程序使用,如下所示: Locked MS Access File

当我尝试在 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

【问题讨论】:

【参考方案1】:

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

If ActiveWorkbook.Connections("Query - MS Access File").OLEDBConnection.IsConnected Then

它有助于查看 VBA 内置库,按下 Ctrl+Space 并寻找有意义的东西:

OLEDBConnection.IsConnected Property (Excel)

【讨论】:

谢谢 除了F2,我从来不知道内置库的快捷方式。虽然我担心的是:我在 Workbook.Open() 方法中有一个刷新代码,旨在刷新所有数据连接。默认情况下,当我打开它时,一切都没有连接,我想知道如果在主帖子中显示的所有警告消息框出现之前建立连接失败,VBA 是否有可能实际捕获。所以我可以这样做:If connection has failed, then use this alternative method to connect。我有一个 VBA 替代方案来绕过故障,但速度要慢得多【参考方案2】:

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

if ActiveWorkbook.Connections("Query - MS Access File").OLEDBConnection.State <> 1 then
   ' Your connection is not ready
end if

【讨论】:

感谢@Vityala 我从 C# 中获取代码并忘记转换为 VB @kiks73 - 欢迎您。但是ConnectionState.Open 也是一个 .net 选项。在 VBA 中,常量就是 1 - ***.com/a/17611807/5448626 @kiks73 感谢您的回答,尽管我收到了Run-time error 438: Object doesn't support this property or method 错误。我使用此代码:If (ActiveWorkbook.Connections("Query - Test").OLEDBConnection.State &lt;&gt; ConnectionState.Open) Then MsgBox "Failed to connect" End If @Pherdindy - 从上面的评论中看到答案,写得很好。 @kiks73 错误一定在.OLEDBConnection.State 中的某个地方我仍然得到同样的错误。我应该检索任何类或模块吗?在Object BrowserOLEDBConnection 类中,没有名称为State 的成员

以上是关于有没有办法在出现警告消息框之前检测是不是使用 VBA 建立数据连接失败?的主要内容,如果未能解决你的问题,请参考以下文章

VB禁止文本框输入

有没有办法在运行更新脚本之前检测 Microsoft Teams 是不是正在使用?

检测页面上是不是显示警报或确认

ABBYY FineReader出现错误和警告提示的解决办法

vb 获取文本框内容

OWASP MASVS 是不是足以显示根检测警告消息,而不是完全终止应用程序?