访问VBA脚本以在网络驱动器上打开并保存Excel文件不会保存文件

时间:2018-08-24 11:08:42

标签: vba excel-vba access-vba

我在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”来解决该问题,但这不起作用,并且文件仍以只读模式打开。

第二次编辑:请在下面检查我是否回答了自己的问题的解决方案。

2 个答案:

答案 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