2017-07-14 111 views
0

我有用VBA打開的工作簿,修改所述工作簿,然後關閉所述工作簿。到目前爲止,我所擁有的是:工作簿不會用VBA關閉,除非手動打開

Sub OpenandModify() 
application.screenupdating = false 
workbooks.open Filename:="FilePath\WkbkName.xlsm" 

*Modify Workbook 


Workbooks("WkbkName.xlsm").close SaveChanges:=True 
application.screenupdating = true 
End Sub() 

如果我的工作簿中運行宏已經打開,宏正常工作並關閉上述工作簿。但是,如果工作簿尚未打開,則該文件在修改後保持打開狀態(請注意,修改發生,因此我認爲這不是Workbook.Open的問題)。有任何想法嗎?

在此先感謝。

回答

0

在我的工作簿上玩了更多。我似乎發現了這個問題。在修改代碼部分中,我有另一個子例程,它從工作簿中添加一個不同於WkbkName.xlsm的工作表。如果工作表已經存在,則將其作爲工作表(2)添加並且工作簿不會關閉。如果工作表不存在,則工作簿將打開並正確修改並關閉。我仍然不明白爲什麼它會這樣,所以如果有人有任何想法,將不勝感激。

現在,我只是打算添加一個檢查重複的工作表,並退出子如果它發生。

+0

我打開工作簿包含一個Workbook_open運行的代碼另一位,它應該有一個計時器在它上面,在我原來的代碼中使用消息框已經搞亂了定時器,從而導致問題! – OrangeHippo

0

您遇到的一些問題可能是由於代碼與正在處理的工作簿混淆。

使用一個變量來保存到您的工作簿的引用,並且只使用整個代碼:

Sub OpenandModify() 

    Dim wrkBk As Workbook 

    Application.ScreenUpdating = False 
    'Open the workbook and assign it to wrkBk variable. 
    Set wrkBk = Workbooks.Open(Filename:="FilePath\WkbkName.xlsm") 

    'Modify Workbook 
    With wrkBk 
     .Worksheets("Sheet1").Range("A1") = "Modified!" 
    End With 

    wrkBk.Close SaveChanges:=True 
    Application.ScreenUpdating = True 

End Sub 
相關問題