将硬编码路径替换为vbscript

时间:2017-01-10 20:39:06

标签: excel-vba vbscript vba excel

我有一个vbscript,它打开一个工作簿并在工作簿的module1中运行一个过程,然后关闭工作簿。效果很好。但事情就是这样。工作簿的路径是硬编码的,如下所示:

Set xlBook = xlApp.Workbooks.Open("E:\FolderName\WorkbookName.xlsm", 0, True)

我不介意要求用户将脚本和工作簿放在同一个文件夹中,并且要求他们不要更改工作簿文件的名称,但是我只想替换硬盘带有动态的编码路径,如:

Set xlBook = xlApp.Workbooks.Open(VBSPath & "\WorkbookName.xlsm", 0, True)

所以路径是脚本的路径。

这可能吗?还有其他想法吗?

TOD

3 个答案:

答案 0 :(得分:5)

VBScript通过WScript对象的属性提供有关当前脚本和主机进程的各种信息,其中包括:

  • ScriptFullName:当前脚本的完整路径。
  • ScriptName:当前脚本的文件名。

您可以通过多种方式从ScriptFullName属性派生脚本文件夹,例如

  • 使用GetParentFolder方法:

    Set fso = CreateObject("Scripting.FileSystemObject")
    dir = fso.GetParentFolderName(WScript.ScriptFullName)
    
  • 使用LenLeft函数:

    dir = Left(WScript.ScriptFullName, Len(WScript.ScriptFullName)-Len(WScript.ScriptName))
    
  • 使用InStrRevLeft函数:

    dir = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\"))
    
  • 使用SplitJoin函数:

    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)

作品!

相关问题