2015-05-06 163 views
1

我在此网站上发现以下代码“将Excel文件另存为CSV”有什么方法可以帮助您在特定时间自动运行此代码(每晚11:00晚上),并保存文件名为当前日期(hr2015-05-05),任何帮助将不胜感激。由于在特定时间运行VBA代码

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
Dim Sourcewb As Workbook 
Dim Destwb As Workbook 
Dim TempFileName As String 

With Application 
    .ScreenUpdating = False 
    .EnableEvents = False 
    .DisplayAlerts = False 
End With 

Set Sourcewb = ActiveWorkbook 
TempFileName = Sourcewb.FullName + ".csv" 

'Copy the sheet to a new workbook 
ActiveSheet.Copy 
Set Destwb = ActiveWorkbook 

'Save the new workbook and close it 
With Destwb 
    .SaveAs Filename:=TempFileName, FileFormat:=xlCSV, ConflictResolution:=xlLocalSessionChanges 
    .Close SaveChanges:=False 
End With 

With Application 
    .ScreenUpdating = True 
    .EnableEvents = True 
    .DisplayAlerts = True 
End With 
End Sub 

编辑固定标签问题

+1

你可以访问使用Windows任务调度程序? – Sam

+0

绝对最好的方法是利用Powershell和Windows Task Scheduler。 –

+0

是的我可以访问Windows任务计划程序,但是Task Scheduler如何运行VBA代码并使用当前日期保存文件? – user3877643

回答

6

我会做的两种方式这一个。

一个将通过Windows任务调度程序。您将在哪里设置任务来打开Excel并以此方式运行。见http://www.mrexcel.com/forum/excel-questions/302970-task-scheduler-vbulletin-script-auto-open-excel.html

或者

使用代码

Application.OnTime TimeValue("23:00:00"), SUBNAMEHERE

更改SUBNAMEHERE到的代码是子。不知道这是否会通过

EDIT运行beforesave部分添加的代码有文件名

变化TempFileName = Sourcewb.FullName + ".csv"

TempFileName = Sourcewb.FullName & " hr" & format(now,"YYYY-MM-DD") & ".csv"

+0

如果您使用第二个选项,是不是基本上必须打开Excel,运行宏,然后Excel基本上会被冻结,等待2300?或者,您还可以在运行等待该TimeValue的宏时使用Excel吗? – BruceWayne

+0

@ user3578951,excel不会被冻结。 –

+1

不错的解决方案。在任何情况下,我都没有把这个代码放在'BeforeSave'中。 – dePatinkin