从Excel vba shell更改工作目录

时间:2015-08-28 17:33:03

标签: excel vba excel-vba

为了工作,我尝试从Excel VBA宏运行Python脚本。

宏如下 -

Sub Plot()

Shell "C:\Users\maheshda\AppData\Local\Continuum\Anaconda3\python.exe C:\Users\maheshda\Tool\Tool\Main.py", vbNormalFocus

End Sub

从命令行运行时脚本运行正常,但不幸的是,因为我在Python脚本中使用了相对文件路径(在某一点上,我调用来自' ../输入/&的文件#39;)脚本崩溃,因为当前工作目录不是C:\ Users \ maheshda \ Tool \ Tool。

如何在宏中更改工作目录?谢谢!

4 个答案:

答案 0 :(得分:7)

这在VBA中是一项微不足道的任务,使用ChDir

  

ChDir声明

     

更改当前目录或文件夹。

     

语法

     

ChDir 路径

     

必需的path参数是一个字符串表达式,用于标识哪个目录或文件夹成为新的默认目录或文件夹。路径可以包括驱动器。如果未指定驱动器,ChDir将更改当前驱动器上的默认目录或文件夹。

由于您的main.py位于C:\Users\maheshda\Tool\Tool\,请在调用Python脚本之前使用以下

ChDir "C:\Users\maheshda\Tool\Tool"

或(因为它在驱动器C上):

ChDir "\Users\maheshda\Tool\Tool"

答案 1 :(得分:2)

根据Wiktor Stribiżew的答案和评论进行扩展,以下子目录可用于在任何情况下更改当前目录。

using (var client = new WebClient())
{
    var responseString = client.DownloadString("http://www.example.com/recepticle.aspx");
}

快乐的编码!

答案 2 :(得分:1)

FCastro,你为什么要打扰那个StrComp系列?而且,就此而言,为什么要打扰Strings对象?

我想如果驱动器是外部的并且尚未访问它可能需要一些时间,但只要路径不是USB / CD / DVD /等等......,那么:

Public Sub Change_Current_Directory(NewDirectoryPath as string)
    ChDrive Left(NewDirectoryPath,1)
    ChDir NewDirectoryPath
End Function

答案 3 :(得分:0)

如果您的行为是打开excel窗口,然后打开您的最新文件,请注意,您不要忘记添加更改驱动器,然后将目录更改为VBA代码。

因为Excel总是打开默认文件,所以它总是以默认目录开头!

Dim ThisWorkbookPath As String
Dim ThisWorkbookPathParts As Variant

ThisWorkbookPath = ThisWorkbook.Path
ThisWorkbookPathParts = Split(ThisWorkbookPath, _
                        Application.PathSeparator)

ChDrive ThisWorkbookPathParts(LBound(ThisWorkbookPathParts))
ChDir ThisWorkbookPath