2014-06-05 86 views
0

目标:我试图自动关闭工作簿以更新报告,因为有用户打开它们,并忘记在晚上关闭它们。我已将自动关闭时间设置为上午12点。了解自动关闭并保存在Excel中的代码

问题1:所以我已经有一些针对这个问题的解决方案。我通过在google上进行的一些搜索找到了答案,并结合了几段代码来获得我想要的内容。现在我想知道是否可以在一个模块或ThisWorkbook中关闭excel vba自动保存&。基本上保留所有的代码在一个地方。

问题2:我知道第一个和第二个宏工作,我想知道哪个更高效,更干净,为什么?

1ST MACRO

'插入的ThisWorkbook

Private Sub Workbook_Open() 

Static SchedSave 

    If SchedSave <> 0 Then 
    Application.OnTime SchedSave, "SaveWork", , False 
    End If 

    SchedSave = TimeValue("09:29:00") ' Insert Desired time in Military 
    Application.OnTime SchedSave, "SaveWork", , True 

End Sub 

' 插入模块

Sub SaveWork() 
    ThisWorkbook.Save 
    ThisWorkbook.Close 
End Sub 

2ND MACRO

'插入的ThisWorkbook

Private Sub Workbook_Open() 
    Reset 
End Sub 

Private Sub Workbook_SheetActivate(ByVal Sh As Object) 
    Reset 
End Sub 

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    Reset 
End Sub 

' 插入模块

Sub Reset() 
    Static SchedSave 
    If SchedSave <> 0 Then 
    Application.OnTime SchedSave, "SaveWork", , False 
    End If 
    SchedSave = TimeValue("12:00:00") ' 12AM 
    Application.OnTime SchedSave, "SaveWork", , True 
End Sub 

Sub SaveWork() 
    ThisWorkbook.Save 
    ThisWorkbook.Close 
End Sub 

还贴出:http://www.mrexcel.com/forum/excel-q...ml#post3830083(这是我得到的帮助来获得第一宏工作)

+0

这个我会去解决2,你可以接着调用从几个地方的Reset()ThisWorkbook.Close的SaveChanges:=假 – Nybbe

回答

0

我可能不是天才,但没有什么能阻止你将“模块代码”放在“本书”中。

我不明白为什么每次打开工作簿时,都必须调用“重置”宏,每次更改工作表时,以及......打开工作簿时不会激活工作表?我会说第一是最好的。

编辑:大声笑我没有看到格式化的“插入的ThisWorkbook

+0

在关于将模块代码放入ThisWorkbook中,您是否建议我将代码更改为可能如下所示: '插入此工作簿 Sub Workbook_Open() Static SchedSave If SchedSave <> 0 Then Application.OnTime SchedSave, "SaveWork", , False End If SchedSave = TimeValue("09:29:00") ' Insert Desired time in Military Application.OnTime SchedSave, "SaveWork", , True End Sub Sub SaveWork() ThisWorkbook.Save ThisWorkbook.Close End Sub new2hacking

+0

如果我正确理解,那正是第一种可能性,恕我直言是最好的 – Noldor130884