【问题标题】:Disk size issue when using Dos Dir command in Excel VBA在 Excel VBA 中使用 Dos Dir 命令时的磁盘大小问题
【发布时间】:2020-04-30 12:36:04
【问题描述】:

我在 Excel VBA 中使用 Dos Dir 命令时遇到一个关于磁盘大小的奇怪问题。

我正在开发一个程序,在该程序中,我需要在同一台计算机上获取目录及其所有子目录的目录列表,并将其保存到文本文件中。这段代码将由完整的例程运行多次。该计算机是运行 Windows 10 的通用桌面。Excel 在 C: 中运行,要列出的目录在 E:(内部安装的驱动器)中,文件正在保存到 N:(a USB驱动器)。

我运行的格式是“Dir/s E:\'目录名'\ >>n:\Edir.txt”

当我在“命令提示符”中手动运行它时,它可以完美运行,但是当我尝试将其嵌入“Shell”命令时,我通常会在命令提示符窗格中收到一条错误消息,提示“磁盘空间不足” .并且文本文件被创建,但在列表中的随机点被截断。

我使用的代码行是'''PID = Shell("cmd /k Dir/s E:\Directory Name\ >>N:\Edir.txt", vbNormalFocus)'''

使用的每个磁盘都有超过 150gb 的可用空间,完整的文本文件大约为 3.3mb。

我觉得这很令人困惑,每个驱动器都有足够的可用空间,而且每次手动调用时它都能正常工作,有时从 shell 命令调用时,它更是如此。有什么想法吗?

R。弗兰克汉姆

【问题讨论】:

    标签: excel shell directory


    【解决方案1】:

    我想我已经找到了答案,尽管我不清楚究竟是什么原因。 'Red Herring' 位于 Dos 错误消息“磁盘空间不足”中。

    看来真正的问题是处理 Dos Dir 命令所花费的时间。如果我延迟 10 秒("Application.Wait (Now + TimeValue("0:00:10"))"),让 'Dir' 命令有时间完成,它可以完美运行。有点麻烦,因为它会大大减慢执行速度,但不是什么大问题。

    R。弗兰克汉姆

    【讨论】:

    • 注意cmd /k k使窗口打开,而cmd /c c在执行命令后失去窗口。 (这里没有 VBA 知识,但我认为应该有类似 ShellWait 的东西,这将消除 Application.Wait 和手动关闭)
    • @Stephan 感谢您的回复。它把我推向了另一条已经结出硕果的研究。
      一个简单的答案似乎是使用“wshell”命令而不是“Shell”。

      代码

      设置 wsh = VBA.CreateObject("WScript.Shell") 将 waitOnReturn 调暗为布尔值:waitOnReturn = True 将 windowStyle 调暗为整数:windowStyle = 1 调暗 errorCode As Long Runline = 0 Then MsgBox "Program exited with error code " & errorCode & "."结束如果
    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2012-09-13
    • 2022-01-17
    • 2021-06-06
    • 1970-01-01
    相关资源
    最近更新 更多