2017-07-19 143 views
2

我有以下的代碼是工作,但.close關閉WB不保存行:VBA:Workbooks.Save和關閉不保存

Option Explicit 
Public Function updateStatus(fpath As String, fname As String, num As String) 

Dim wk As String, yr As String 
Dim owb As Workbook 
Dim trow As Variant 

With Application 
    .DisplayAlerts = False 
    .ScreenUpdating = False 
    .EnableEvents = False 
End With 

Set owb = Application.Workbooks.Open(fpath & fname) 

trow = owb.Sheets(1).Range("Change" & num).Row 
owb.Sheets(1).Cells(trow, 5).value = "Test" 

With owb 
    .Save 
    .Close SaveChanges:=True 'This line doesn't seem to work 
End With 

With Application 
    .DisplayAlerts = True 
    .ScreenUpdating = True 
    .EnableEvents = True 
End With 

End Function 

如果我刪除行,世行保持打開狀態,我看到變化。如果我添加該行並打開特定文件,則看不到變化。

+1

遠程'與應用程序'行在子的頂部(註釋掉),看看是否顯示警告。 – FunThomas

+0

如果我刪除了行,沒有任何警告 – PhilHar

回答

0

正如評論中所述,代碼看起來不錯,您可能在Excel中啓用了一些數據保護功能,但無法保存。儘量讓這樣的小例子

Option Explicit 

Public Sub TestMe() 

    Dim owb As Workbook 

    Set owb = Application.Workbooks.Open("C:\Users\vityata\Desktop\Testing.xlsx") 
    owb.Save 
    owb.Close 

End Sub 

然後用F8調試,看看,你有,一旦你通過owb.Save去傳遞消息。

只是,你知道:

.Save 
.Close SaveChanges:=True 

隨着.Save行,你讓SaveChanges:=True部分無用。反之亦然。

+0

使用F8進行調試是完美的提示 - 當打開工作簿時發現腳本正在運行,該腳本覆蓋了前面的腳本所寫的內容。刪除/更改scirpt後,它工作。謝謝 – PhilHar

+0

@PhilHar - 歡迎您:) – Vityata