1
我們有一個內部系統,它可以生成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
電子表格被打開,並沒有導入代碼的是,當函數被調用如果連接失敗,則運行或刷新。但這種感覺像是一種笨拙的做法 - 一個網絡速度較慢的日子,內部人員會因爲初學者而被該ConnectionTimeout = 1
咬傷。如果有人忘記專門爲客戶保存表格的填充副本,他們會得到一個空白的電子表格。
有沒有更細緻的方法去解決這個問題?
的影響實際上,我們開始了這條路線,但中途放棄,因爲我們發現DocumentFormat.OpenXml工作是燃燒的恐怖無休止的噩夢。因此恢復爲具有外部連接的模板。我不喜歡回到那個路徑:( –
我一定是錯過了一些東西然後我不明白爲什麼你會在使用不同的文件時遇到任何麻煩你可以從現有的工作簿中創建新的工作簿所以你仍然可以使用現有的「模板」(這個「模板」可以是普通的舊.xls或.xlsx文件,不一定是Excel .xlt或.xlst模板文件)。例如,「Set wb = Workbooks.Add(」C :\ Path \ To \ MyTemplate.xls「)'。此時,您的代碼所需的唯一更改是將引用從'ActiveWorkbook'更改爲'wb'。 – mwolfe02