簡體   English   中英

無法關閉打開的excel工作簿

[英]unable to close opened excel workbook

我正在使用命令按鈕,用戶表單等構建一個excel文件,其中包含指向其他工作簿的鏈接。

對於我工作表上的命令按鈕,我使用的代碼與我的userforms中的命令按鈕相同:

workbooks.open "path"

使用userform命令按鈕,然后添加以下內容

unload me

當我通過用戶窗體打開工作簿時,我無法在之后關閉它。 我必須首先激活我的工作簿,然后激活打開的工作簿,然后我可以關閉它

我試過把“卸載我”放在“workbooks.open”之后,但這並沒有改變任何東西。

我也嘗試了以下,也沒有工作:

unload me
dim wb as workbook
set wb = workbooks.open"pathname"
wb.activate

任何想法?

現在的示例:有人需要進行價格計算。 他們在我的文件中打開價格userform。 他們點擊“計算文件”按鈕。 計算文件打開。 他們進行計算,現在他們在計算文件中完成了。 所以他們想通過點擊十字架來關閉它。 但他們無法點擊十字架。 然后他們切換到任務欄上的文件,然后切換回計算文件。 現在他們可以點擊十字架了

我不明白為什么他們不能第一次點擊它,但他們可以在我和開放工作簿之間切換后點擊它。

我懷疑這是由於不正確的表單處理和“默認實例”卸載后重新創建自己。 如果您在顯示之前沒有創建自己的表單實例,VBA將在您卸載后使用它時執行各種松鼠事務。

如果您只需要打開工作簿並卸載表單,*在卸載表單之前不要增加工作簿的引用計數。 此外,從窗體中調用Unload Me后,請勿嘗試運行任何其他代碼。 您發布的代碼應該只是:

Workbooks.Open "pathname"
Unload Me

當然,表單的調用代碼不在問題中,但也可以在那里解決。

Unload僅影響UserForm

嘗試添加對打開的工作簿的引用,然后關閉它,如下所示:

dim wb as Workbook
set wb = Workbooks.Open "pathname"
wb.activate
' do whatever with it while it's open
wb.Close

如果您正在執行的操作不是自動化的,則表單上將需要一個按鈕,用於設置對工作簿的引用,並在用戶完成編輯后將其關閉。

如果您將作為變量打開的工作簿定義 - 您將能夠輕松地關閉它們。 請記住,這不會保存工作簿。

Dim DataBook As Workbook
Set DataBook = Workbooks.open ("pathname")
' Do something useful with the file

DataBook.Close

你在這里要問的問題並不完全清楚,但我會盡力為你提供一個完整的答案。 如果在關閉用戶表單時沒有成功使用Unload Me語句,請嘗試在VBA中指定完整的表單名稱。 那是:

Unload UserFormName

如果您嘗試關閉已打開的工作簿 (通過用戶表單),則可以使用Workbooks.Close方法:

Dim wb as Workbook
Set wb = Workbooks.Open(Filename:="C:\example.xls") 
wb.Activate
'Close workbook
wb.Close
'Unload form
Unload ExampleForm

有關使用Unload語句的更多信息,請訪問: - https://msdn.microsoft.com/en-us/library/aa445829(v=vs.60).aspx

更多關於Workbooks.Close語句的使用可以在這里找到: - https://msdn.microsoft.com/en-us/library/office/ff838613.aspx

我不確定是什么原因導致您描述的行為(無法單擊活動Excel窗口中的“關閉”X按鈕)。 但是您當前的工作流程是:

  1. 用戶與表單交互以查看/訪問文件
  2. 用戶單擊表單上的一個按鈕來卸載表單
  3. 然后,用戶需要手動關閉(1)中打開的文件

更好的解決方案是刪除第三步,並從表單的事件處理程序之一( UserForm_QueryCloseUserForm_Terminate )關閉工作簿。 或者,您可以將其添加到CommandButtonClick事件中,但這與要求用戶手動關閉文件沒有什么不同。

這可能很簡單:

Private Sub UserForm_Terminate()
' should be called when form Unloads
On Error Resume Next
Workbooks.Close "filename.xlsx"
End Sub

以這種方式,文件將在用戶關閉或以其他方式卸載用戶表單時關閉。

好吧,我想我找到了解決辦法。

假設我有一個工作簿1,它有一個名為ControlPage的表單,帶有命令按鈕,可以打開工作簿2。

Private Sub CommandButton1_Click()

Dim workbook2 As Workbook
Dim workbook1name As String
workbook1name = ThisWorkbook.name

Set workbook2 = Workbooks.Open("workbook2.xlsx")
ControlPage.Hide
Workbooks(workbook1name).Activate
Workbooks("workbook2.xlsx").Activate

End Sub

因此,當我嘗試直接激活工作簿2時,'激活'位似乎不能正常工作,我只是激活第一個,然后第二個激活一個接一個。 扭曲,但為我做了伎倆。

暫無
暫無

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

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