title: How to run a macro daily using windows task scheduler
body: <p>I have a macro which I want to run at a specified time daily (say 11 am) even if Excel is closed.</p>
  
  <p>What I have found out is that I can do it by creating Windows Task Scheduler, but I'm new to Windows and don't know how this is created.</p>
  
  <p>The following is my macro:</p>
  
  <pre><code>Sub Mail_Sheet_Outlook_Body()
  
      Dim rng As Range
      Dim OutApp As Object
      Dim OutMail As Object
  
      With Application
          .EnableEvents = False
          .ScreenUpdating = False
      End With
  
      Set rng = Nothing
      Set rng = ActiveSheet.UsedRange
      'You can also use a sheet name
      'Set rng = Sheets("YourSheet").UsedRange
  
      Set OutApp = CreateObject("Outlook.Application")
      Set OutMail = OutApp.CreateItem(0)
  
      On Error Resume Next
      With OutMail
          .To = ""
          .CC = ""
          .BCC = ""
          .Subject = "Testing"
          .HTMLBody = RangetoHTML(rng)
          .Send   'or use .Display
      End With
      On Error GoTo 0
  
      With Application
          .EnableEvents = True
          .ScreenUpdating = True
      End With
  
      Set OutMail = Nothing
      Set OutApp = Nothing
  End Sub
  
  
  Function RangetoHTML(rng As Range)
  
      Dim fso As Object
      Dim ts As Object
      Dim TempFile As String
      Dim TempWB As Workbook
  
      TempFile = Environ$("temp") &amp; "\" &amp; Format(Now, "dd-mm-yy h-mm-ss") &amp; ".htm"
  
      'Copy the range and create a new workbook to past the data in
      rng.Copy
      Set TempWB = Workbooks.Add(1)
      With TempWB.Sheets(1)
          .Cells(1).PasteSpecial Paste:=8
          .Cells(1).PasteSpecial xlPasteValues, , False, False
          .Cells(1).PasteSpecial xlPasteFormats, , False, False
          .Cells(1).Select
          Application.CutCopyMode = False
          On Error Resume Next
          .DrawingObjects.Visible = True
          .DrawingObjects.Delete
          On Error GoTo 0
      End With
  
      'Publish the sheet to a htm file
      With TempWB.PublishObjects.Add( _
           SourceType:=xlSourceRange, _
           Filename:=TempFile, _
           Sheet:=TempWB.Sheets(1).Name, _
           Source:=TempWB.Sheets(1).UsedRange.Address, _
           HtmlType:=xlHtmlStatic)
          .Publish (True)
      End With
  
      'Read all data from the htm file into RangetoHTML
      Set fso = CreateObject("Scripting.FileSystemObject")
      Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
      RangetoHTML = ts.readall
      ts.Close
      RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                            "align=left x:publishsource=")
  
      'Close TempWB
      TempWB.Close savechanges:=False
  
      'Delete the htm file we used in this function
      Kill TempFile
  
      Set ts = Nothing
      Set fso = Nothing
      Set TempWB = Nothing
  End Function
  </code></pre>
  
  <p>Can anyone tell me how to create the windows task scheduler to run this macro daily?</p>
  
  <p>UPDATE:</p>
  
  <p>Wrote the following vbs script:</p>
  
  <pre><code>Dim xlApp, xlBook
  
  Set xlApp = CreateObject("Excel.Application")
  xlApp.DisplayAlerts = False
  Set xlBook = xlApp.Workbooks.Open(“H:\excel.xlsm”, 0, True)
  
  
  xlApp.Run "GetFiles"
  
  xlbook.Save
  xlBook.Close False
  set xlBook = Nothing
  
  xlApp.Quit
  Set xlApp = Nothing
  
  WScript.Echo "Finished."
  WScript.Quit
  </code></pre>