Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA自定义保存_Excel_Vba - Fatal编程技术网

Excel VBA自定义保存

Excel VBA自定义保存,excel,vba,Excel,Vba,我有一个文件,我正试图强制执行版本控制。用户要求它按如下方式工作:当他们保存文件时,excel应将文件的原始版本保存到文件名中包含日期和时间的版本,然后将更新后的版本保存为没有日期和时间 我编写了vba来处理大部分问题,只是在保存前无法很好地使用子工作簿 这是我要保存的内容,如果我只运行VersionControl()宏,它就可以正常工作 子版本控制() Dim myFileName为字符串、originalName为字符串、tempFileName为字符串、wbOld为工作簿 original

我有一个文件,我正试图强制执行版本控制。用户要求它按如下方式工作:当他们保存文件时,excel应将文件的原始版本保存到文件名中包含日期和时间的版本,然后将更新后的版本保存为没有日期和时间

我编写了vba来处理大部分问题,只是在保存前无法很好地使用
子工作簿

这是我要保存的内容,如果我只运行
VersionControl()
宏,它就可以正常工作

子版本控制()
Dim myFileName为字符串、originalName为字符串、tempFileName为字符串、wbOld为工作簿
originalName=ThisWorkbook.FullName
myFileName=NewPath()
Application.DisplayAlerts=False
tempFileName=ThisWorkbook.Path&“\Version\u Control\u Temp.xlsm”
ActiveWorkbook.SaveAs文件名:=临时文件名,文件格式:=xlOpenXMLWorkbookMacroEnabled
Set wbOld=Workbooks.Open(originalName、False、True)
wbOld.SaveAs文件名:=myFileName,文件格式:=xlOpenXMLWorkbookMacroEnabled
沃德,关门
ActiveWorkbook.SaveAs文件名:=原始名称,文件格式:=xlOpenXMLWorkbookMacroEnabled
端接头
函数NewPath()作为字符串
Dim testString作为字符串,fullPath作为字符串
testString=年(现在)和格式(月(现在),“00”)和格式(天(现在),“00”)和小时(现在)和分钟(现在)
fullPath=thishworkbook.FullName
fullPath=Left(fullPath,Len(fullPath)-5)和“904;”与“testString&”.xlsm”
NewPath=完整路径
端函数
私有子工作簿_BeforeSave(ByVal SaveAsUI为布尔值_
取消为布尔值)
如果不是SaveAsUI那么
调用版本控制
取消=真
如果结束
端接头

我似乎遇到的问题是,如果在保存之前从
工作簿内部调用
VersionControl()
,则会触发尝试像我一样为每次保存运行
VersionControl()

要避免此处的无限循环,请在执行另一次保存之前禁用事件



所以您陷入了循环?正确,我只需要找到一种方法,在宏第一次保存时触发它,并忽略
VersionControl()
中的所有保存。如果可能的话。
Application.EnableEvents=False
。。。然后在最后切换回
True
Sub VersionControl()
   Application.EnableEvets = False

       'Your code goes here

   Application.EnableEvents = True
End Sub