在Excel中刷新外部数据的程序化控制

时间:2014-05-23 12:46:43

标签: excel vba excel-vba

我们有一个内部系统,可以生成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

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

有更复杂的方法吗?

1 个答案:

答案 0 :(得分:0)

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

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