我继承了一个excel项目,我的任务是自动化和进一步开发 .
用例是
订单进来了
用户打开基本(root)excel文件
相关信息中的类型(客户,订单,数据,任务等)
并将新任务文件保存在正在执行任务的文件夹中
保留基础(根)excel basic并为下一个订单做好准备 .
新任务文件需要具有某个已排序的文件名结构 .
我的问题出现在ActiveWorkbook.SaveAs文件名中 .
当我单步执行(F5)行时,它会完成所有步骤,创建文件名,显示另存为用户界面,正确显示正确的文件夹和建议的文件名,并实际保存文件 . 当我从ErrHandler和最后一个Application.EnableEvents = yes出来时 - 它崩溃了 . 它似乎要么关闭基本文件,打开新文件,要么将活动工作簿传输到新的保存文件 .
哪个好,如果它可以停止崩溃 .
If criticalInput then
Msgbox “U been bad, U Shall not PASS!”, vbCritical ‘Not actual text or box showing, just for demo.
Else
Dim fileSaveName As Variant
'### It Crashes after saving (possible at opening)
fileSaveName = Application.GetSaveAsFilename( _
InitialFileName:=tasksfolder & "\" & suggestFilename, _
fileFilter:="Excel-projectmappe med aktive makroer (*.xlsm), *.xlsm")
If fileSaveName False Then
'### here is where you would save your file
DoEvents ‘ Debugging research tells this should be here. Not that is changes anything.
ActiveWorkbook.SaveAs fileSaveName ‘ During dev this has been disabled.
End If ' SaveAs
End If ' criticalInput
ErrHandler:
'## Reset back to default
Application.DefaultFilePath = strDefault
Application.EnableEvents = True
End Sub
调试
如果我禁用SaveAs并且只在base(root)excel文件上工作,我可以很好地保存文件 .
我可以打开新的任务文件并妥善保存 . (只是一个关于覆盖的错误,Y / N)
调试研究说我在SaveAs之前需要一个DoEvents
调试研究也表示只有最相关的参考文献(在我的情况下取消选择OLE自动化)
在调试过程中,我还创建了AfterSave()和Open() . 它们在正常操作期间正常触发,但在SaveAs崩溃时失败 . 例如,当我禁用SaveAs或正常打开excel书时 .
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
On Error GoTo ErrHandler
If Success Then
Application.EnableEvents = False
'MsgBox "Success save", vbInformation ' for debugging purposes.
End If
ErrHandler:
Application.EnableEvents = True
End Sub
Private Sub Workbook_Open()
'MsgBox "I haz been opened, yehawww", vbInformation ' debugging
End Sub