使用.SaveCopyAs

时间:2016-06-23 14:04:12

标签: excel vba excel-vba excel-2010

我有一个Excel文件模板,并且在美国东部时间晚上11:50我希望它将整天的文件副本保存为使用日期。我遇到的唯一问题是它没有保存。没有错误消息,任何文件夹都没有。此外,该文件需要保存在不同的位置。有人在乎帮忙吗?

这是代码的副本:

sub end_of_day()
Dim path As String
Dim filename As String

path = "\\myfile\project\"
filename = "Log as of " & Sheet2.Range("N1").Value & " ET"


If Sheet2.Range("O1").Value = Sheet2.Range("T1") Then

ThisWorkbook.SaveCopyAs Filename:=path & filename
End If
End Sub

注意: 我生活在一个不同的时区,这就是为什么在我的Excel工作表中,我有两个单元格包含当前的ET时间和它比较的ET时间,以便它开始保存它的副本。

N1 的ET格式为mmddyyyy(06232016) O1 是当前东部时间hh:mm AM / PM(晚上11:50), T1 具有恒定时间11:50 PM。

我错过了什么工作吗?感谢您的回复。

修改

我向大家道歉,我不清楚。此工作簿使用任务计划程序每10分钟打开一次,然后运行其中的所有模块。它将在那段时间内收集提取的数据,直到晚上11:50(对不起,我输入AM),它将自己保存为收集的一天结束的数据,然后开始运行新的数据。上午12点的一天。出于这个原因,我想保存文件的副本而不是触摸工作簿,因为它将充当模板。

3 个答案:

答案 0 :(得分:0)

如果我正确读到这个权利,那么你希望这会在11.50开始。如果陈述不是那样的话,那么这个过程就必须不断地监控时间。为什么你不能使用计划任务来执行此操作?

答案 1 :(得分:0)

您遇到的问题是您的sub没有按预期运行,subs只会在调用它们时运行。由于您使用了If语句来检查时间并执行操作,因此将其设置为无限循环的唯一方法就是将其设置为无限循环。这将是一种非常低效的方式来实现你想要做的事情。

而不是在时间是11:50时反复检查时间并进行保存,而是可以安排子进程在那时运行。这样做的理想方法是将以下子放在ThisWorkbook

Private Sub Workbook_Open()
    Application.OnTime TimeValue("11:50:00"), "end_of_day"
End Sub

一旦打开工作簿,这将安排宏在11:50运行,而不必在11:50运行子程序。此时间将是您使用工作簿的机器的当地时间,因此需要在需要时进行调整。

您还应该从If子文件中删除end_of_day语句,因为不再需要它。

值得注意的是,上午11点50分是中午前10分钟,但是看起来你想要在一天结束时运行,即午夜?在这种情况下,你的时间应该是“23:50:00”

答案 2 :(得分:0)

感谢您提供的所有见解。该文件现在正常工作。我刚刚修改了If语句。我刚刚在代码上添加了一个“大于”的符号,然后它工作正常。它可以节省时间,如果仍然没有,那就继续。

sub end_of_day()
Dim path As String
Dim filename As String

path = "\\myfile\project\"
filename = "Log as of " & Sheet2.Range("N1").Value & " ET"


If Sheet2.Range("O1").Value >= Sheet2.Range("T1") Then

ThisWorkbook.SaveCopyAs Filename:=path & filename
End If
End Sub