2014-05-23 22 views
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咬傷。如果有人忘記專門爲客戶保存表格的填充副本,他們會得到一個空白的電子表格。

有沒有更細緻的方法去解決這個問題?

回答

0

我建議讓你的代碼創建一個新的工作簿來保存你想要導出的數據。將新文件發送給您的客戶。這樣可以完成幾件事情:

  • 你不必擔心發送空白工作簿到客戶
  • 你不會被髮送宏到客戶端,這將避免他們眼見安全警告
  • 可以增加超時在你的代碼,因爲它不再對您的客戶
+0

的影響實際上,我們開始了這條路線,但中途放棄,因爲我們發現DocumentFormat.OpenXml工作是燃燒的恐怖無休止的噩夢。因此恢復爲具有外部連接的模板。我不喜歡回到那個路徑:( –

+0

我一定是錯過了一些東西然後我不明白爲什麼你會在使用不同的文件時遇到任何麻煩你可以從現有的工作簿中創建新的工作簿所以你仍然可以使用現有的「模板」(這個「模板」可以是普通的舊.xls或.xlsx文件,不一定是Excel .xlt或.xlst模板文件)。例如,「Set wb = Workbooks.Add(」C :\ Path \ To \ MyTemplate.xls「)'。此時,您的代碼所需的唯一更改是將引用從'ActiveWorkbook'更改爲'wb'。 – mwolfe02

相關問題