【问题标题】:Why does VBScript run from %userprofile%\Documents when run from Excel VBA为什么从 Excel VBA 运行时 VBScript 从 %userprofile%\Documents 运行
【发布时间】:2016-10-20 15:08:36
【问题描述】:

短背景

我有一个在 Excel 中构建的应用程序,我正在尝试添加 Excel 充当控制器并运行不同 VBScript 文件的功能(我知道这听起来很奇怪,但请耐心等待)。为了测试这个概念,我编写了一个简短的 VBScript,它只是 Echos 脚本所在文件夹的路径。

VBScript (run-from-excel.vbs)

Set fso = CreateObject("Scripting.FileSystemObject")

scriptPath = fso.GetAbsolutePathName(".")
WScript.Echo(scriptPath)

当在正确目录中的控制台使用cscript run-from-excel.vbs 运行时,输出为:C:\Users\cmfonvi\dev\vbscript,这与预期的一样。

现在,用于 Excel 集成。我写了一个简单的Sub,通过WScript在控制台上运行一个VBScript文件。

VBA - Excel

Sub runVBScript(filePath As String)
    Shell "wscript " & filePath, vbNormalFocus
End Sub

我现在用命令运行这个Sub

runVBScript (ActiveWorkbook.Path & "\run-from-excel.vbs")

(工作簿和 VBScript 当前位于同一目录中,因此可行)。但是,输出并不像我预期的那样。它打开的窗口输出C:\Users\cmfonvi\Documents,这意味着以某种方式运行VBScript 的wscript 进程在%userprofile%\Documents 目录中被初始化。

我的问题有两个:

  1. 为什么会这样?
  2. 如何使控制台在正确的目录(例如,%userprofile%\Desktop)中初始化?

【问题讨论】:

    标签: vba excel vbscript


    【解决方案1】:

    .(在您的 VBScript 代码中)是当前工作目录。 ActiveWorkbook.Path(在您的 VBA 代码中)是包含活动工作簿的目录的路径。这两条路径不一定相同。如果您希望 VBScript 代码输出脚本所在的目录,您需要使用以下内容:

    fso.GetParentFolderName(WScript.ScriptFullName)
    

    如果您希望 VBScript 使用特定的工作目录,请按如下方式更改:

    Set sh = CreateObject("WScript.Shell")
    sh.CurrentDirectory = "C:\some\folder"
    

    【讨论】:

    • 对 VBScript 的更改奏效了!非常感谢。在我标记为已接受之前,我想进一步澄清一下它为什么选择 Documents 文件夹,因为我的两个文件都没有驻留在那里(它们都在同一个目录中)
    • Documents 文件夹是 Office 应用程序的默认工作目录。例如,在 VBA 编辑器的直接窗口中尝试 debug.print CurDir
    • 谢谢!从来没有意识到它和我通常使用的 ActiveWorkbook.Path 之间有区别
    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多