簡體   English   中英

Excel在Workbook_Open上崩潰

[英]Excel crashes on Workbook_Open

我有一個復雜的工作簿,其中包含許多代碼,並且被分布在不同地方的許多用戶使用...而且我不是專業的程序員。 在Workbook_Open事件中,我處理了一個初始屏幕,使用密碼保護並顯示了主要工作表並設置了一些全局變量。 該文件已經可以合理穩定地運行了幾個月,但是最近我開始使用功能區來改進用戶界面(目標是替換用作菜單的浮動形式)。 然后它變得不穩定,打開文件時經常使Excel崩潰。 總體而言,情況與此非常相似: 激活工作表時,Excel [VBA]在“打開工作簿”時崩潰 我已經刪除(或注釋)了所有與Ribbon相關的代碼,均未成功,並且上面線程中建議的Wait命令也無濟於事。

如果在保護模式下打開該工作簿,然后啟用該代碼,則它將順利運行。 更有趣的是,如果我關閉它而不保存它,那么下次打開它時它將運行良好,而無需使用保護模式。 但是,一旦我保存文件,它將在下次打開時崩潰。

實際上,崩潰不是立即發生的。 似乎代碼處於無限循環中。 如果我轉到VBAProject窗口,標題欄顯示“ [running ...]”(或類似名稱-我的安裝使用法語...),並且如果ThisWorkbook模塊之前已打開,則看不到代碼,而是屏幕某些部分的凍結圖像。 當我嘗試中斷執行時,它確實崩潰了。

我已經導出,刪除並重新導入了所有代碼和表格-沒運氣。 該代碼通常受密碼保護,但是我將其刪除以進行測試。 現在我不知道該怎么辦。 有什么想法嗎?

Open事件的代碼是:

Dim S As Object, rng As Range

'On Error GoTo Terminate

Application.Wait Now + #12:00:05 AM#

Application.ScreenUpdating = False
Application.EnableEvents = False
NSheets = Me.Sheets.Count

For Each S In Me.Sheets
    Set rng = AuxTables.Range("AT_SheetNames").Find(S.CodeName, , xlValues, xlWhole)
    If Not rng Is Nothing Then
        'Set sheet visibility
        If S.CodeName <> "Warning" Then S.Visible = Val(rng.Offset(0, 16))
        'Ensure all standard tabs are protected
        S.Protect Password:="xxxx", UserInterfaceOnly:=True, DrawingObjects:=False, _
            Contents:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
            AllowFormattingRows:=True
        S.EnableOutlining = True
        'Erase marker of Degraded Mode
        S.Range(IIf(S.CodeName <> "CashCurves", "C", "B") & "1").ClearContents
        Call SetSheetsDefaults(S)
    End If
Next S

Warning.Visible = xlHidden

Call EnableRecalculate(True)
bl_UpdateSupplySummary = True
Application.EnableEvents = True
Application.ScreenUpdating = True
On Error Resume Next
    AppActivate Application.Caption, True
    Cover.Activate

Exit Sub

Terminate:
    Dim Msg As String
    Msg = "Description: " & Err.Description & Chr(10)
    Msg = Msg & "Module: Workbook" & Chr(10)
    Msg = Msg & "Procedure: Open" & Chr(10) & Chr(10)
    Msg = Msg & "Execution will be interrupted." & Chr(10) & Chr(10)
    Msg = Msg & "Please print this screen and send it to xxx@company.com"
    MsgBox Msg, vbCritical, "Unexpected Error " & Err.Number
    Application.EnableEvents = True
    Application.ScreenUpdating = True

End Sub

謝謝。

我不知道此答案是否適用於這種情況,但是我偶然發現了這些問答鏈接(同時研究了我自己的一個類似問題),並認為它們可能會有所幫助(因為編輯功能區有時涉及使用ActiveX )

ragoran; 2010年7月22日ExpertsExchange顯示他在Workbook_Open代碼( wsPrimary是預先存在的工作表的代號)期間遇到錯誤57121

該錯誤表明wsPrimary不會退出(!! ...但是它在那里!)。如果我停止執行宏,電子表格將繼續打開,那么一切恢復正常。

似乎宏在電子表格完成其所有對象列表的初始化之前正在運行...

他找到的解決方案是:

簡而言之,如果您在某些電子表格上具有activeX控件,並且用戶控件具有綁定到工作表單元格的用戶窗體,並且在設計模式下打開窗體時編譯了VBA,則可能會導致文件中出現一些不一致之處,從而導致我的行為。 ....這是我的情況。

解決方案是在運行時而不是設計時綁定控件。


另外,對ragoran問題的答案具有此鏈接(ExpertsExchange) ,其中的問題是

當我嘗試以兼容模式保存時,出現“未初始化的ActiveX控件無法傳輸為所選文件格式。如果繼續,控件將丟失。”

羅里·阿奇博爾德(2007-04-16)回復

“如果工作簿包含被認為對初始化不安全(UFI)的ActiveX控件,則在將工作簿保存為較早的Excel文件格式時,它們將丟失。您可能希望將這些控件標記為“初始化安全”(SFI)。如果打開具有未設置為高安全性的未初始化ActiveX控件的工作簿時,必須首先使用消息欄將其啟用,然后才能對其進行初始化。”


我確實意識到他們描述的症狀似乎與OP的不匹配; 但是,這些問題在Excel 2003/2007中發生,並且-如果仍然存在,則可能在Excel 2010或更高版本中有所不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM