为什么从Excel VBA运行时VBScript从%userprofile%\ Documents运行?
短背景
我有一个应用程序,我在Excel中build立,我试图添加function,其中Excel作为一个控制器,并运行不同的VBScript文件(我知道这听起来像一个奇怪的情况,但忍受着我)。 为了testing这个概念,我写了一个简短的VBScript,简单地说就是脚本所在文件夹的path。
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
目录中被初始化。
我的问题是双重的:
- 这是为什么?
- 我怎样才能使控制台初始化在适当的目录(例如,在
%userprofile%\Desktop
)?
.
(在你的VBScript代码中)是当前的工作目录。 ActiveWorkbook.Path
(在您的VBA代码中)是包含活动工作簿的目录的path。 这两条路不一定是一样的。 如果您希望VBScript代码输出脚本所在的目录,则需要使用如下所示的内容:
fso.GetParentFolderName(WScript.ScriptFullName)
如果你想VBScript使用一个特定的工作目录,像这样改变它:
Set sh = CreateObject("WScript.Shell") sh.CurrentDirectory = "C:\some\folder"