Changing working directory from Excel vba shell
为了工作,我尝试从Excel VBA宏运行一个python脚本。
宏如下-
1 2 3 4 5 | Sub Plot() Shell"C:\Users\maheshda\AppData\Local\Continuum\Anaconda3\python.exe C:\Users\maheshda\Tool\Tool\Main.py", vbNormalFocus End Sub |
从命令行运行时,脚本运行得很好,但不幸的是,因为我在python脚本中使用了相对的文件路径(在某一点上,我从".../input/"调用文件),所以脚本崩溃,因为当前的工作目录不是C:usersmaheshda ool ool。
如何从宏中更改工作目录?谢谢您!
这是vba中的一项小任务,使用
ChDir Statement
Changes the current directory or folder.
Syntax
ChDir pathThe required path argument is a string expression that identifies which directory or folder becomes the new default directory or folder. The path may include the drive. If no drive is specified,
ChDir changes the default directory or folder on the current drive.
由于您的
1 | ChDir"C:\Users\maheshda\Tool\Tool" |
或者(因为它在驱动器C上):
1 | ChDir"\Users\maheshda\Tool\Tool" |
扩展wiktor stribi?电子战的答案和评论,下面的子可以用来在任何情况下更改当前目录。
1 2 3 4 5 6 7 8 | Public Sub Change_Current_Directory(NewDirectoryPath as string) Dim CurrentDirectoryPath as string CurrentDirectoryPath = curdir if Strings.StrComp(Strings.Left(CurrentDirectoryPath,2), Strings.Left(NewDirectoryPath,2), vbTextCompare) then ChDrive Strings.Left(NewDirectoryPath,1) end if ChDir NewDirectoryPath End Function |
快乐编码!
fcastro,你为什么要为strcomp系列产品烦恼?就这点而言,为什么还要考虑字符串对象呢?
我想如果驱动器是外部的,并且还没有被访问过,可能需要一段时间,但是只要路径不是预期的USB/CD/DVD/等,那么:
1 2 3 4 | Public Sub Change_Current_Directory(NewDirectoryPath as string) ChDrive Left(NewDirectoryPath,1) ChDir NewDirectoryPath End Function |
如果您的行为是打开一个Excel窗口,然后打开最近的文件,请注意不要忘记添加更改驱动器,然后将目录更改为您的VBA代码。
因为Excel总是以默认目录开始,即使它只是打开最近的文件!
1 2 3 4 5 6 7 8 9 | Dim ThisWorkbookPath As String Dim ThisWorkbookPathParts As Variant ThisWorkbookPath = ThisWorkbook.Path ThisWorkbookPathParts = Split(ThisWorkbookPath, _ Application.PathSeparator) ChDrive ThisWorkbookPathParts(LBound(ThisWorkbookPathParts)) ChDir ThisWorkbookPath |