对Excel中的外部数据进行刷新的编程控制

我们有一个内部系统生成excel报告,通过使用外部连接的表和透视表从数据库直接获取数据。

然而,这些报告有时需要发送到外部客户端,显然连接将失败,他们会得到错误报告和空的报告。

在工作簿VBA中,我们已经得到了以下用于检查连接是否有效的函数:

Public Function ConnectADO() As Boolean Dim retry As Boolean Dim provider As String Dim ConnectionString As String On Error Resume Next retry = False ConnectADO = False ConnectionString = "MyConnectionString" If mycon Is Nothing Then Set mycon = New ADODB.Connection mycon.CommandTimeout = 30 mycon.ConnectionTimeout = 1 'so external clients aren't waiting ages mycon.CursorLocation = adUseClient mycon.Open ConnectionString End If If (mycon.State <> 1) Then ConnectADO = False Set mycon = Nothing Else ConnectADO = True End If If Err Then ConnectADO = False Set mycon = Nothing End If End Function 

当打开电子表格时调用该函数,如果连接失败,则不会运行或刷新任何导入代码。 但是这样做感觉像一个笨拙的做法 – 一个缓慢的networking日,内部的人会因为ConnectionTimeout = 1而被初学者咬伤。 如果有人忘记专门为客户保存表格的填充副本,他们会得到一个空的电子表格。

有没有更细致的方法去做这件事?

我build议让你的代码创build一个新的工作簿来保存你想要导出的数据。 将该新文件发送给您的客户。 这完成了几件事情:

  • 您不必担心将空白工作簿发送到您的客户端
  • 你不会发送macros给你的客户,这将避免他们看到安全警告
  • 您可以增加代码中的超时时间,因为它不会再对客户端产生影响