我有一个vbscript,它打开一个工作簿并在工作簿的module1中运行一个过程,然后关闭工作簿。效果很好。但事情就是这样。工作簿的路径是硬编码的,如下所示:
Set xlBook = xlApp.Workbooks.Open("E:\FolderName\WorkbookName.xlsm", 0, True)
我不介意要求用户将脚本和工作簿放在同一个文件夹中,并且要求他们不要更改工作簿文件的名称,但是我只想替换硬盘带有动态的编码路径,如:
Set xlBook = xlApp.Workbooks.Open(VBSPath & "\WorkbookName.xlsm", 0, True)
所以路径是脚本的路径。
这可能吗?还有其他想法吗?
TOD
答案 0 :(得分:5)
VBScript通过WScript
对象的属性提供有关当前脚本和主机进程的各种信息,其中包括:
ScriptFullName
:当前脚本的完整路径。ScriptName
:当前脚本的文件名。您可以通过多种方式从ScriptFullName
属性派生脚本文件夹,例如
使用GetParentFolder
方法:
Set fso = CreateObject("Scripting.FileSystemObject")
dir = fso.GetParentFolderName(WScript.ScriptFullName)
dir = Left(WScript.ScriptFullName, Len(WScript.ScriptFullName)-Len(WScript.ScriptName))
使用InStrRev
和Left
函数:
dir = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\"))
a = Split(WScript.ScriptFullName, "\")
a(UBound(a)) = ""
dir = Join(a, "\")
使用Replace
函数:
dir = Replace(WScript.ScriptFullName, WScript.ScriptName, "")
请注意,如果(无论出于什么原因)脚本名称出现在脚本的全名中的其他位置(例如C:\script.vbs\script.vbs
),此方法可能会出现问题。
答案 1 :(得分:-1)
您可以这样尝试:
VBSPath = Left(WScript.ScriptFullName,(Len(WScript.ScriptFullName) - (Len(WScript.ScriptName) + 1)))
msgbox VBSPath
答案 2 :(得分:-1)
我找到了一个解决方案,与此处发布的解决方案非常相似。
我创建了一个WScript.Shell
对象:
Set WshShell = CreateObject("WScript.Shell")
然后我使用CurrentDirectory
作为工作簿的路径:
Set xlBook = xlApp.Workbooks.Open(WshShell.CurrentDirectory & "\WorkbookName.xlsm", 0, True)
作品!