簡體   English   中英

打開任何其他工作簿時,不會關閉啟用VBA的Excel 2010工作簿

[英]VBA-enabled Excel 2010 workbook will not close when any other workbook is open

我最近完成了一個使用大量VBA的Excel工作簿。 電子表格始終能夠執行其所有預期功能,並且它是Excel中唯一打開的工作簿,因此沒有任何問題。 但是,當打開任何其他工作簿(包括不相關的文件)時,該工作簿將不會關閉。 單擊右上角的紅色“ x”完全不會執行任何操作,並且不會顯示任何錯誤消息。 為了關閉它,所有其他Excel窗口必須事先關閉。

盡管這不會影響工作簿本身的功能,但有足夠的人在使用它,我想避免帶來麻煩,因為在關閉該工作簿之前,必須先關閉已打開的任何其他工作簿。

那么,是否有人對導致這種情況發生的原因有任何想法? 我確實有Workbook_Close()事件的代碼,但這被指定為私有代碼,並且僅位於此電子表格的ThisWorkbook部分內。 我對為什么沒有VBA的另一張紙阻止該張紙關閉感到困惑。 請讓我知道是否有任何需要澄清的內容,謝謝。

編輯-這是Workbook_BeforeClose()事件的代碼:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Me.Saved = False Then Me.Save
Call PrepareWorkbook

End Sub

Sub PrepareWorkbook()

Application.ScreenUpdating = False
Call UnprotectWorkbook

Dim masterSheet As Worksheet
Set masterSheet = ActiveWorkbook.Worksheets("PLANNING")

For Each sheet In ActiveWorkbook.Worksheets
    If Not (sheet.Name = "README" Or sheet.Name = "PLANNING" Or sheet.Name = "PREV") Then
        sheet.Visible = xlSheetVeryHidden
    End If
    If (sheet.Name = "README" Or sheet.Name = "PLANNING" Or sheet.Name = "PREV" Or sheet.Name = "ADMIN") Then
        Call ProtectSheet(ActiveWorkbook.Worksheets(sheet.Name))
    Else
        Call ProtectPlannerSheet(ActiveWorkbook.Worksheets(sheet.Name))
    End If
Next

If ActiveWorkbook.ActiveSheet.Name <> "PLANNING" Then
    masterSheet.Select
End If

Call ProtectWorkbook

Application.ScreenUpdating = True

End Sub

我應該注意,注釋掉Workbook_BeforeClose()事件中對PrepareWorkbook()的調用並不能解決問題。

聽起來您正在對該工作簿執行某些操作,例如“編輯單元格”,這會阻止它關閉(打開格式彈出窗口等其他操作也可以做到這一點)。

嘗試選擇工作簿,按ESC,然后手動將其關閉。 如果可行,則在代碼中尋找“編輯單元格”或類似內容的位置。

我發現了問題的根源,這就是我保護工作簿的方式。 在我的VBA代碼中,將Workbook.Protect函數的“ Windows”屬性設置為True; 我不確定這是否是Excel的預期功能,但是無論如何,這樣做是否可以在其他工作簿也打開的情況下無法關閉當前工作簿。 將此屬性更改為False可以解決此問題,並且我可以按通常的預期關閉工作簿。

因此,除非絕對必要,否則我建議避免將“ Windows”屬性設置為True,除非您完全了解其實際功能。

暫無
暫無

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

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