从任务计划程序/ SQL Server JOB运行Excel宏

时间:2017-10-27 07:35:27

标签: sql excel vba excel-vba

我有一个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。我应该在代码中添加什么来做到这一点?

1 个答案:

答案 0 :(得分:1)

感谢@paul

的建议

这就是我所做的:

  1. 打开Excel工作簿
  2. 按Alt + F11打开VBA编辑器
  3. 双击Project Explorer中的ThisWorkbook
  4. 复制以下代码并在代码窗口中粘贴
  5. 更改文件夹位置
  6. 将文件另存为启用宏的工作簿
  7. 打开工作簿进行测试,它将自动运行宏。

    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