【问题标题】:VBScript to Open an Excel File and then do a Save AsVBScript 打开 Excel 文件,然后执行另存为
【发布时间】:2016-02-01 14:02:30
【问题描述】:

我正在尝试编写一个 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”)

【问题讨论】:

  • 你到底在哪里遇到问题?

标签: excel vbscript vba


【解决方案1】:

您的脚本需要打开工作簿,然后更新日期、计算(“填充其他单元格”)、保存并关闭。我的建议是不要为此使用睡眠,而只是强制工作簿计算然后关闭它。就像@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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

    • 感谢您的帮助。我收到错误第 10 行字符 56 错误无效字符代码 800A0408 源 Microsoft VBScript 编译错误。同样对于另存为功能如何添加类似 test.day.xlms
    • 对于另存为,请查看stackoverflow.com/a/25214233/78522。其余的,看看我的编辑
    • 你能告诉我如何在脚本休眠后添加到脚本中吗?我希望脚本选择整个工作表进行复制并作为“值”的特殊值过去。我仍然无法使 saveas 功能正常工作。我希望文件保存为路径“c:\Users\dr\Desktop\test-today.xlsx”)
    • 我的大部分代码都能正常工作。无论我做什么,我都无法让 objWorkbook.SaveAs 方法正常工作。我想将文件保存在名称+日期或只是日期的特定位置,因为名称无关紧要。它应该是 xlsx 文件格式。请帮忙。
    • @DannyR XLSX 是格式没有宏,工作表将在没有宏的情况下保存。要做到这一点,只需将, 52 放在SaveAs 行的末尾,或者在名称前添加一个完整路径。你有错误吗?哪一个?
    猜你喜欢
    • 2015-09-19
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多