2014-09-05 42 views
-1

我已經編寫了VBA代碼,它接受一組excel文件,然後打開它們,刷新樞紐,保存並關閉文件。它適用於任何連接到SQL Server以刷新數據的工作簿。如果工作簿還包含內置關閉然後本身的過程中失敗,出現錯誤的工作簿中保存的數據的樞軸:VBA代碼將刷新SQL服務器源,但不是Excel源的樞紐

無法打開數據透視表源文件:「「\ NCH \ DFS \ SharedArea \私人\ BIS \ Groups \ KPI-Group \ Pivots \ [Hand-Hygiene-Audits.xls]] QPS'

正如我所說的數據透視表源與透視圖在同一張表內。如果我手動刷新工作簿中沒有問題。 (在這個例子中,QPS是手冊數據和關聯數據庫的標籤)

(請注意,我必須在路徑和文件名之間添加一個空格,因爲Stackoverflow代碼格式會在\ Pivots之後刪除一些反斜槓原因)

值得注意的是,方括號在文件名周圍並未正常顯示,它們似乎只出現在此錯誤消息中。我在網上搜索過,大多數討論過方括號問題的人都說它從IE下載了哪些文件。在我的情況下,所有三個受影響的文件都是從頭開始製作的。

處理刷新元素的代碼摘錄如下。如果您希望看到我的其他代碼,請告訴我,我會發布它。

有沒有人有任何想法是怎麼回事?

Sub Refresh_BoardPivots_Standard() 
' On Error GoTo Errorhandler 

Dim i 
Dim errorText As String 
Dim x 
Dim objXL As Excel.Application 
Set objXL = CreateObject("Excel.Application") 

GetPivotsToRefresh ' populates array from SQL 
For Each i In StandardBoardPiv 
DoEvents 
'If File_Exists(i) Then 
    If isFileOpen(i) = True Then 
    errorText = i 
    Failed(failedIndex) = errorText 
    failedIndex = failedIndex + 1 
    Else 
    objXL.Visible = True 'False 
    objXL.Workbooks.Open FileName:=i 
     If objXL.ActiveWorkbook.ReadOnly = False Then 
     BackgroundQuery = False 
     objXL.ActiveWorkbook.RefreshAll 
     objXL.Application.CalculateFull 
     objXL.Application.DisplayAlerts = False 
     objXL.ActiveWorkbook.Save 
     objXL.Application.DisplayAlerts = True 
     objXL.Quit 
     Else 
     errorText = i 
     Failed(failedIndex) = errorText 
     failedIndex = failedIndex + 1 
     objXL.Application.DisplayAlerts = False 
     objXL.Quit 
     Application.DisplayAlerts = True 
     End If 
    End If 
'  Else 
'  errorText = i 
'  Failed(failedIndex) = errorText 
'  failedIndex = failedIndex + 1 
' End If 
DoEvents 
If Ref = False Then 
Exit For 
End If 

Next i 

Exit Sub 

'Errorhandler: 
' 
'errorText = i 
'Failed(failedIndex) = errorText 
'failedIndex = failedIndex + 1 

'Resume Next 
End Sub 

回答

0

那麼它看起來像我可以回答我的問題,雖然我不明白爲什麼我的第一種辦法工作了文件的85%。

我以前使用這種方法的項目使用硬編碼的文件名,當填充數組時需要用雙引號括起來。我最新的方法將文件名存儲在一個sql表中並將它們加載到vba子文件夾中。不幸的是,我沒有注意到雙引號仍然存在,不再需要。該過程仍然打開並刷新了85%的文件,但在其中幾個上面拋出了這個奇怪的錯誤。

從文件名和進程中刪除的引號執行得很好。