我正在尝试在MS Office Professional Plus 2016中自动刷新查询。
我有一个运行vbs脚本的cmd脚本,而vbs脚本又运行Excel宏。如果我手动运行它,一切都正常。当我设置Windows任务计划程序并选择选项**“无论用户是否登录都运行”**时,出现问题。
我的宏正在将查询结果日志保存到文本文件中,以便我可以确定代码中断的位置。在我看来,Excel在与任务计划程序一起运行时显示了一个警告框(或类似的内容)。我无法确定希望用户执行什么操作,因为计划程序隐藏了所有警告。如果手动运行cmd脚本,或通过任务计划程序使用“仅当用户登录时运行”选项运行,则没有警告/提示。
这是我的RefreshQueries()子函数。我试着注解代码,并确认中断整个自动化的那一行是With iTable.QueryTable
中的.Refresh
。
Private Sub RefreshQueries()
AddToLogFile ("Hello from subroutine RefreshQueries().")
Dim iWorksheet As Excel.Worksheet
Dim iTable As Excel.ListObject
'Check each worksheet.
For Each iWorksheet In Excel.ActiveWorkbook.Worksheets
AddToLogFile ("For-loop for iWorksheet " & iWorksheet.Name)
'Check all Objects if it is a query object.
For Each iTable In iWorksheet.ListObjects
If iTable.SourceType = Excel.XlListObjectSourceType.xlSrcQuery Then
AddToLogFile ("Trying to refresh iTable: " & iTable.Name)
QueryTimeStart = Timer
On Error Resume Next
With iTable.QueryTable 'Refresh the query data.
.BackgroundQuery = False
.EnableRefresh = True
.Refresh
End With
If Err.Number <> 0 Then
QueryRunTime = CalculateRunTime("QueryRunTime") 'Stop timer and get the duration.
Call AddToHtmlErrorTable(iTable.Name, Err.Number, Err.Description, QueryRunTime) 'Add entry to error table.
AddToLogFile ("Query in iTable " & iTable.Name & " failed. Description: " & Err.Description)
NumberOfFailedQueries = NumberOfFailedQueries + 1 'IMPORTANT: increment must be after updating html error table!
Err.Clear 'Clear errors between for loops.
Else
NumberOfSuccessfulQueries = NumberOfSuccessfulQueries + 1
AddToLogFile ("Query in iTable " & iTable.Name & " successfully refreshed.")
End If
End If
Next iTable
Next iWorksheet
AddToLogFile ("Exiting subroutine RefreshQueries().")
End Sub
我猜我的问题如下:
1.我们是否能够以某种方式捕获Excel在后台显示的提示符(如果手动运行,则不会弹出任何提示符),或者
1.我们是否可以自动确认Excel中显示的任何消息(不知道它是什么),或者
1.是否有任何已知的设置会在没有任何确认的情况下执行连接。
有人对此问题有什么想法、经验或建议吗?
1条答案
按热度按时间hc2pp10m1#
您需要像here所描述的那样将错误捕获器添加到VBA例程中