【发布时间】:2014-10-30 10:14:03
【问题描述】:
在你明白之前:Application.DisplayAlerts = False 并没有解决我的问题。
我编写了一个 VBA 程序(在 Excel 2010 中启动),它围绕包含不同 Excel 文件的数组循环。循环打开文件,刷新数据,保存并关闭数组中每个项目的文件。我编写了一个错误捕获子例程,因此我记录了哪些 excel 文件无法打开/刷新/保存等,以便用户可以手动检查它们。
有些文件非常大,涉及到通过网络传输的大量数据;有时我会得到一个对话框:Excel 正在等待另一个应用程序完成 OLE 操作。
我可以使用Application.DisplayAlerts = False 禁用消息,但这可能会禁用所有警报,所以我无法捕捉到错误?
此外,我已经使用该行进行了测试,它不会停止弹出对话框。如果我按下回车键,它会继续,但可能会在几分钟后再次弹出。
有没有办法在不停止其他警报的情况下专门停止消息?
注意。我的进程有一个 Excel 控制实例,它运行 VBA 并打开要在单独实例中刷新的工作簿。
感谢您的帮助
下面是我的代码摘录,其中包含刷新元素
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 ' populate 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
Application.DisplayAlerts = 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
【问题讨论】:
-
为什么投反对票,怎么了?如果有问题我可以解决它
-
我给了你一个 +1,因为我看不出你的问题有什么问题。 :P 给你的问题:你为什么要创建另一个 Excel 实例?这不是不必要的麻烦吗?
-
谢谢 n8。是的,我必须添加第二个实例来解决我的中断子例程的问题。如果用户需要安全地停止进程,他们需要单击一个按钮,但焦点停留在刷新工作簿上,因此无法访问该按钮,因此是单独的实例。
-
感谢链接,我试过了。我没有收到任何错误消息,但它只是挂起,直到我不得不崩溃为止。我的一个朋友认为这可能是我的显示警报语句的排序,打算试一试。干杯