为了工作,我尝试从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。
如何在宏中更改工作目录?谢谢!
答案 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