【问题标题】:Access VBA script to open and save excel files on network drive doesnt save files访问 VBA 脚本以在网络驱动器上打开和保存 excel 文件不保存文件
【发布时间】:2019-01-30 20:36:05
【问题描述】:

我在 Access 中有一个脚本,它应该遍历共享网络驱动器中的 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")

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

第二次编辑:查看下面的解决方案,我回答了我自己的问题。

【问题讨论】:

  • 可能是 NTFS/Share 问题,权限不足。您可以重命名该共享中的文件吗?

标签: excel ms-access vba


【解决方案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

【讨论】:

    【解决方案2】:

    您可以通过切换此选项来停止 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
    

    【讨论】:

    • 抑制警告总比解决问题好,但是你的代码丢失了On Error Resume Next;) 严重的是,这应该是最后的手段,除了使用错误来检测更胖的东西(例如控制是否存在)。
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2019-08-31
    • 2018-06-02
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多