我在Access中有一个脚本,该脚本应该循环访问共享网络驱动器中的excel文件,然后打开并保存它们。
在本地文件夹上运行脚本时,该脚本可以按预期运行,但是在网络驱动器上运行该脚本时,会出现一个弹出窗口,提示:“此位置已经存在具有该名称的文件,您是否仍要保存它?当我按yes时,弹出窗口关闭,但是在检查文件的时间戳时,没有文件被覆盖。
这是脚本:
Sub demo()
Dim directory As String, fileName As String
Dim Mywb As Workbook
Dim app As New Excel.Application
app.Visible = True
directory = "Y:\E. Data Hub\4. KPIs\C. Price Competitiveness\2018\07 July\DT\"
fileName = Dir(directory & "*.xls")
Do While fileName <> ""
Workbooks.Open (directory & fileName)
fileName = Dir()
ActiveWorkbook.CheckCompatibility = False
ActiveWorkbook.Save
ActiveWorkbook.Close
Loop
app.Quit
End Sub
理想情况下,我什至不会收到那些我必须手动确认的弹出窗口,当然文件应该保存/覆盖。
编辑:我认为问题似乎是文件以只读模式打开。我尝试通过在Workbooks.Open命令中添加“ ReadOnly:= False,Notify:= False”来解决该问题,但这不起作用,并且文件仍以只读模式打开。
第二次编辑:请在下面检查我是否回答了自己的问题的解决方案。
答案 0 :(得分:1)
您可以通过切换此选项来停止excel询问用户的大多数消息:
Application.DisplayAlerts
因此在您的代码中,它看起来像:
Public Sub demo()
Dim directory As String, fileName As String
Dim Mywb As Workbook
Dim app As New Excel.Application
app.Visible = True
directory = "Y:\E. Data Hub\4. KPIs\C. Price Competitiveness\2018\07 July\DT\"
fileName = Dir(directory & "*.xls")
Application.DisplayAlerts = False
Do While fileName <> ""
Workbooks.Open directory & fileName
fileName = Dir()
ActiveWorkbook.CheckCompatibility = False
ActiveWorkbook.Save
ActiveWorkbook.Close
Loop
Application.DisplayAlerts = True
app.Quit
End Sub
答案 1 :(得分:1)
我为我的特定问题找到了解决方案,因此对于以后遇到相同问题的任何人: 对我来说,问题是文件在excel中以“只读”模式打开的结果。
为解决这个问题,我加入了
ActiveWorkbook.LockServerFile
进入我的循环。
这等效于在excel上按“编辑工作簿”按钮。 我的完整代码如下所示:
Sub demo()
Dim directory As String, fileName As String
Dim Mywb As Workbook
Dim app As New Excel.Application
app.Visible = True
directory = "Y:\E. Data Hub\4. KPIs\C. Price Competitiveness\2018\07 July\DT\"
fileName = Dir(directory & "*.xls")
Application.Echo False
DoCmd.SetWarnings False
Do While fileName <> ""
Workbooks.Open (directory & fileName)
fileName = Dir()
ActiveWorkbook.LockServerFile
ActiveWorkbook.CheckCompatibility = False
ActiveWorkbook.Save
ActiveWorkbook.Close
Loop
app.Quit
DoCmd.SetWarnings True
Application.Echo True
End Sub