2017-07-19 417 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