我编写了VBA代码,它接受一组excel文件,然后打开它们,刷新枢轴,保存和关闭文件。它适用于任何只有连接到SQL服务器以刷新数据的枢轴的工作簿。如果工作簿还包含一个基于工作簿本身保存的数据的数据透视表,则该过程将失败并显示错误:
无法打开数据透视表源文件:'" \ nch \ dfs \ SharedArea \ Private \ BIS \ Groups \ KPI-Group \ Pivots \ [Hand-Hygiene-Audits.xls&#34 ] 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 :(得分:0)
看起来我可以回答我自己的问题,但我不明白为什么我的第一种方法适用于85%的文件。
我之前使用此方法的项目使用了硬编码文件名,在填充数组时需要用双引号括起来。我的最新方法将文件名存储在sql表中,并将它们加载到vba sub中。不幸的是,我没有注意到双引号仍然存在,不再需要。该过程仍然打开并刷新了85%的文件,但在其中一些文件上抛出了这个奇怪的错误。
从文件名和进程中删除的引号执行正常。