Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将文件保存到新驱动器后,使用Shell运行批处理文件_Excel_Vba - Fatal编程技术网

Excel 将文件保存到新驱动器后,使用Shell运行批处理文件

Excel 将文件保存到新驱动器后,使用Shell运行批处理文件,excel,vba,Excel,Vba,我有一个工作簿,它使用宏通过Shell函数运行批处理文件(CEA.bat)。我在本地D:驱动器(C:是主/OS分区)上创建了工作簿,它在那里工作 我想与同事共享工作簿的副本,但shell函数似乎只在创建它的驱动器中工作(d:)。如果我在原始驱动器(D:)的另一个目录下创建工作簿的副本,它会工作。如果我在另一个驱动器(例如C:)或另一台机器上创建副本,Shell函数将不会运行批处理文件 批处理文件和工作簿始终保存在同一文件夹中。如果我直接运行批处理文件,它就可以工作,所以我认为它没有问题。这个问题

我有一个工作簿,它使用宏通过Shell函数运行批处理文件(CEA.bat)。我在本地D:驱动器(C:是主/OS分区)上创建了工作簿,它在那里工作

我想与同事共享工作簿的副本,但shell函数似乎只在创建它的驱动器中工作(d:)。如果我在原始驱动器(D:)的另一个目录下创建工作簿的副本,它会工作。如果我在另一个驱动器(例如C:)或另一台机器上创建副本,Shell函数将不会运行批处理文件

批处理文件和工作簿始终保存在同一文件夹中。如果我直接运行批处理文件,它就可以工作,所以我认为它没有问题。这个问题似乎与Shell函数有关。相关代码行如下所示:

Dim CEArun As String

ChDrive ThisWorkbook.Path 
ChDir ThisWorkbook.Path

CEArun = Chr(34) & ThisWorkbook.Path & "\CEA.bat" & Chr(34)

Call Shell(CEArun, vbMinimizedNoFocus)
我遇到了一种使用WshShell对象在VBA中运行批处理文件的方法,但我还没有尝试过。它似乎只有在“Windows脚本主机对象模型”被激活的情况下才能工作。我的同事对VBA的了解甚至比我还少,所以我更愿意给他们一个他们可以使用的工具,而不必乱动VBA设置。

这对我来说很有用

将带有ping的.txt文件保存到我自己的计算机,并在我的工作簿中运行此代码。蝙蝠打开并发出砰的一声:

Option Explicit
Sub Test()

    Dim MyPath As String: MyPath = ThisWorkbook.Path & "\CEA.bat"
    Shell MyPath, vbMinimizedNoFocus

End Sub

从代码中删除
Chr(34)
,当您将一个变量声明为
String
时,它已经有了
”,因此您实际上是在告诉
Shell“C:\Folder\Cea.bat”“
谢谢Damian,我对VBA中引号的正确使用感到有点困惑。不幸的是,移除它们并没有解决问题。谢谢Damian,这非常有效!我猜这个问题一定与“Call”语句有关。@seutmatt这不应该是个问题,不是一个好的实践,但不是一个问题。