VBScript打开Excel文件,然后执行另存为

时间:2016-02-01 14:02:30

标签: excel excel-vba vbscript vba

我正在尝试编写一个vba脚本来自动打开一个excel文件,在某个单元格中增加一天,然后等待2分钟,以便所有其他字段填充当天的信息。填充其他字段后,我希望脚本关闭文件并保存为运行脚本的日期。我将把这个脚本添加到Windows任务管理器,每天凌晨2点运行。到目前为止我有这样的事情。

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("c:\Users\dr\Desktop\test.xlsx")

objExcel.Application.Visible = True
objExcel.Workbooks.Add
objExcel.Cells(3, 2).Value = "=today()"

WScript.Sleep 120000

wb.SaveAs Format( Now(), “DD-MMM-YY”)

2 个答案:

答案 0 :(得分:1)

不太确定完全理解您的问题,但我已经看到了一个或两个修复:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("c:\Users\dr\Desktop\test.xlsx")

objExcel.Application.Visible = True
'objExcel.Workbooks.Add
objWorkbook.Sheets("sheetName").Cells(3, 2).Value = "=today()"

WScript.Sleep 120000

objWorkbook.SaveAs "F" & format(date(), "yyyymmdd") & ".xlsm", 52

无论如何,每天将B3中的公式更改为"=Today()"是完全没用的,因为它在前一天已经是相同的公式。

编辑:如果您是从Excel VBA程序运行此程序,则不需要 来创建Excel的新实例:

dim sFolder as string
sFolder = "c:\Users\dr\Desktop\"
Set objWorkbook = Workbooks.Open(sFolder & "test.xlsx")
objWorkbook.Sheets("sheetName").recalc
objWorkbook.SaveAs sFolder & format(date(), "yyyymmdd") & ".xlsx"
objWorkbook.Close

答案 1 :(得分:1)

您的脚本需要打开工作簿,然后更新日期,计算("填充其他单元格"),保存并关闭。我的建议是不要为此使用Sleep,而只是强制Workbook计算然后关闭它。就像@iDevlop所说:改变B3中的公式是不必要的。实际显示Excel应用程序也是如此。

以下打开工作簿,重新计算(因此B3值将是今天的日期,工作簿的其余部分将相应地计算),并保存:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("c:\Users\dr\Desktop\test.xlsx")
objExcel.Calculate
objWorkbook.SaveAs Format( Now(), “DD-MMM-YY”)

有关.calculate的信息,请参阅https://msdn.microsoft.com/EN-US/library/office/ff195517.aspx