2017-10-27 1 views
1

Ich habe ein Excel-Makro, das funktioniert, wenn ich es in Excel ausführen, aber ich möchte dieses Makro aus Task-Scheduler oder einem SQL-Server-Job (mit Cscript ich denke). Ich habe folgende VBS:Ausführen von Excel-Makro aus Taskplaner/SQL Server JOB

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 

Wie kann ich dies vom Taskplaner/SQL Server Agent ausführen? Es muss Excel zuerst irgendwie öffnen. Was sollte ich dem Code hinzufügen, um das zu tun?

+0

Sorry - ich die Frage den ganzen Weg bis zum Ende lesen müssen, um wirklich, anstatt stoppe sobald ich die Probleme im Code sehe. 'Setzen Sie objExcel = CreateObject (" Excel.Application ")' und stellen Sie dann sicher, dass alle Verweise auf Objekte, die Teil der Excel-Anwendung sind, qualifiziert sind - z. 'objExcel.ActiveWorkbook'. (Und wahrscheinlich müssen Sie 'objExcel' als Parameter für' RefreshAllData' übergeben, damit auch innerhalb dieser Prozedur darauf zugegriffen werden kann.) – YowE3K

+0

Erstellen Sie eine Excel-Arbeitsmappe mit einem Autorun-Makro, und beginnen Sie dann mit dem Blatt aus der externen Anwendung . –

Antwort

1

Danke für die Anregung @ Paul

Das ist, was ich tat:

  1. Öffnen Sie eine Excel-Arbeitsmappe
  2. Drücken Sie Alt + F11 VBA-Editor zu öffnen
  3. Klicken Sie doppelt auf Thisworkbook von Project Explorer
  4. Kopieren Sie den folgenden Code und Einfügen in das Codefenster
  5. Ändern Sie den Ordner Speicherort
  6. Speichern Sie die Datei als Makro aktiviert Arbeitsmappe
  7. Öffnen Sie die Arbeitsmappe, um es zu testen, wird es automatisch ein Makro ausführen.

    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

Verwandte Themen