【发布时间】:2019-11-01 17:25:42
【问题描述】:
我将 MS Access 文件发送到一个 zip 文件,以便每晚通过 MS Access 文件备份它们。有些是超过 2GB 的大文件,在我们缓慢的共享驱动器网络上压缩需要 5 到 10 分钟。我希望我的 ACCDB 文件暂停,直到文件完全复制到 zip 文件中,然后再继续下一个文件。它目前几乎立即进入下一个文件,事情很快就搞砸了,特别是因为我在将 MS Access 文件复制到 zip 后杀死了它。
-
尝试在 zip 中找到文件,然后我将最终构建一个带有计时器的循环,直到 Dir 存在为止。
'copy files to zip Dim shl As New Shell32.Shell shl.NameSpace(strZipFilePath).CopyHere (strZip) Set sh = CreateObject("Shell.Application") x = GetFiles(strPath, "*.zip", True) 'This crashes Access For Each i In x Set n = sh.NameSpace(i) Debug.Print n Next i End -
暂停 600 秒...有时可行,有时不可行,这取决于网络流量。
Do While Dir(strZip) <> 0 sngStart = "" sngStart = Timer Do While Timer < sngStart + 600 '10 minutes=600 seconds DoEvents Loop Loop
【问题讨论】:
-
什么是`GetFiles()'?
-
也许只是使用慢循环并检查 zip 上的最后修改,直到 x 分钟没有更改。
-
潜在的第二个选项。根据您压缩文件的方式,您可以让 VBA 使用 WScript shell 调用批处理文件或其他命令行代码,并等待指示成功或失败的输出。 stackoverflow.com/questions/15951837/…