Vba Excel中外部数据刷新的编程控制
我们有一个内部系统,可以生成excel报告,通过使用外部连接的表和透视表直接从数据库获取数据 然而,这些报告有时需要发送到外部客户机,因此,显然连接将失败,他们将得到错误报告和空报告 在工作簿VBA中,我们有以下函数用于检查连接是否有效:Vba Excel中外部数据刷新的编程控制,vba,excel,Vba,Excel,我们有一个内部系统,可以生成excel报告,通过使用外部连接的表和透视表直接从数据库获取数据 然而,这些报告有时需要发送到外部客户机,因此,显然连接将失败,他们将得到错误报告和空报告 在工作簿VBA中,我们有以下函数用于检查连接是否有效: Public Function ConnectADO() As Boolean Dim retry As Boolean Dim provider As String Dim ConnectionString As String
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
公共函数ConnectADO()作为布尔值
将重试设置为布尔值
将提供程序设置为字符串
Dim ConnectionString作为字符串
出错时继续下一步
重试=错误
ConnectADO=False
ConnectionString=“MyConnectionString”
如果mycon什么都不是
Set mycon=New ADODB.Connection
mycon.CommandTimeout=30
mycon.ConnectionTimeout=1',因此外部客户端不会等待太久
mycon.CursorLocation=adUseClient
mycon.开放连接字符串
如果结束
如果(mycon.State 1),则
ConnectADO=False
设置mycon=Nothing
其他的
ConnectADO=True
如果结束
如果有错误,那么
ConnectADO=False
设置mycon=Nothing
如果结束
端函数
打开电子表格时调用该函数,如果连接失败,则不会运行或刷新任何导入代码。但这感觉像是一种笨拙的方法——在一个缓慢的网络日,对于初学者来说,内部用户将被ConnectionTimeout=1
咬到。如果有人忘记专门为客户保存一份填好的表格副本,他们会得到一份空的电子表格
有没有更细致的方法来实现这一点?我建议让您的代码创建一个新工作簿来保存要导出的数据。将新文件发送给您的客户。这可以实现以下几点:
- 您不必担心向客户发送空白工作簿
- 您不会向客户端发送宏,这将避免它们看到安全警告
- 您可以增加代码中的超时时间,因为它将不再对客户端产生影响
Set wb=Workbooks.Add(“C:\Path\To\MyTemplate.xls”)
。此时,对代码所需的唯一更改是将引用从ActiveWorkbook
更改为wb
。