我有一个Excel宏,当我在Excel中运行它时,但我想从任务调度程序或SQL服务器作业运行此宏(我猜是使用cscript)。我有以下VBS:
Sub RefreshAllExcelInFolder()
Dim fso
Dim ObjFolder
Dim ObjFiles
Dim ObjFile
Dim objExcel
'Creating File System Object
Set fso = CreateObject("Scripting.FileSystemObject")
'Getting the Folder Object
Set ObjFolder = fso.GetFolder("D:\Source Files\")
'Getting the list of Files
Set ObjFiles = ObjFolder.Files
'On Error Resume Next
For Each ObjFile In ObjFiles
If LCase(Right(ObjFile.Name, 5)) = ".xlsx" Or LCase(Right(ObjFile.Name, 4)) = ".xls" Then
Workbooks.Open(ObjFile).Activate
RefreshAllData
End If
Next
End Sub
Sub RefreshAllData()
ActiveWorkbook.RefreshAll
ActiveWorkbook.Save
ActiveWorkbook.Close
''''''''MsgBox ("Going back In")
End Sub
如何从Task Scheduler / SQL Server Agent运行此命令?它需要先以某种方式打开Excel。我应该在代码中添加什么来做到这一点?
答案 0 :(得分:1)
感谢@paul
的建议这就是我所做的:
打开工作簿进行测试,它将自动运行宏。
Private Sub Workbook_Open()
Dim fso
Dim ObjFolder
Dim ObjFiles
Dim ObjFile
Dim objExcel
'Creating File System Object
Set fso = CreateObject("Scripting.FileSystemObject")
'Getting the Folder Object
Set ObjFolder = fso.GetFolder("O:\DATA\Source Files\")
'Getting the list of Files
Set ObjFiles = ObjFolder.Files
'On Error Resume Next
For Each ObjFile In ObjFiles
If LCase(Right(ObjFile.Name, 5)) = ".xlsx" Or
LCase(Right(ObjFile.Name, 4)) = ".xls" Then
Workbooks.Open(ObjFile).Activate
RefreshAllData
End If
Next
End Sub
Sub RefreshAllData() ActiveWorkbook.RefreshAll ActiveWorkbook.Save ActiveWorkbook.Close End Sub