关于WSH.Run CMD类型代码的广义问题

时间:2015-07-20 19:15:19

标签: excel vba excel-vba cmd

以下不是我的代码。我经常在文本中绊倒错误代码。有人告诉我以下代码来实现代码:

您必须设置对Windows Script Host Object Model的引用。 sDrivesBasePath用于设置起始文件夹名称。 sFileList是将结果写入文本文件的位置。

我已将Windows Script Host Object Model设置为被引用,但如果不跳过内置错误,我仍然无法成功运行它。请帮忙

Public sDrive As String
Public sBasePath As String
Public Const sFileList As String = "U:\"
Option Explicit
Sub GetDirTree()
    Dim WSH As WshShell
    Dim lErrCode As Long

    Set WSH = New WshShell
    lErrCode = WSH.Run("cmd.exe /c dir """ & sDrive & sBasePath & """/B /S >" & sFileList, 0, True)
    If lErrCode <> 0 Then
        MsgBox ("Error in GetDirTree: Error Number: " & CStr(lErrCode))
        Stop
    End If

End Sub

代码记入:Ron Rosenfeld

1 个答案:

答案 0 :(得分:2)

  

以下代码要求通过VBE的工具►参考命令将 Windows脚本宿主对象模型添加到项目中。

你错过了一些变量的分配;例如声明时它们是vbnullstrings,而不是赋值。

Option Explicit

Public sDrive As String
Public sBasePath As String
Public sFileList As String

Sub GetDirTree()
    Dim WSH As WshShell
    Dim lErrCode As Long

    sDrive = "c:\"
    sBasePath = "New Folder\*"
    sFileList = Environ("TEMP") & Chr(92) & "My_Dir_List.txt"
    Debug.Print "cmd.exe /c dir """ & sDrive & sBasePath & """/B /S >" & sFileList

    Set WSH = New WshShell
    lErrCode = WSH.Run("cmd.exe /c dir """ & sDrive & sBasePath & """/B /S >" & sFileList, 0, True)
    If lErrCode <> 0 Then
        MsgBox ("Error in GetDirTree: Error Number: " & CStr(lErrCode))
        Stop
    End If

End Sub

我已将sFileList的声明更改为公开但不是常量。您无法即时更改 const ant变量。 sFileList将被放入TEMP环境变量指定的文件夹中。这很方便,因为应该没有写入权限错误。我已将用于VBE的立即窗口的命令发送给调试目的。