我继承了一个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