2017-05-08 310 views
0

我想创建一个启用宏的Excel文件,其中,当按下按钮时,Excel将被保存到data.csv到同一文件夹中,并调用.exe文件(这是再次在相同的文件夹中),它将访问data.csv的输入。从Excel执行.exe文件

但是我准备这个,它创造了.csv文件,当.exe运行时,它是无法访问文件.csv(参照而宏已启动获取的截屏)。该屏幕截图中显示的目录是最初创建.exe的目录 - 这与当前工作目录无关。代码如下所示。我试着单独运行.exe文件,它运行无缝,正确地读取.csv文件,所以exe/csv文件没有问题。只是在从宏运行时,.exe未在正确的文件夹中搜索.csv

Public Sub Save_CSV() 
    Dim MyPATH As String 
    Dim FileNAME As String 
    Dim FilePath As String 
    Dim OldPath As String 
    Dim RetVal As Variant 
    Dim stat As Integer 
    '* 
    FilePath = ActiveWorkbook.path & "\dynjackup.exe" 
    OldPath = CurDir 
    MyPATH = ActiveWorkbook.path 
    FileNAME = ActiveWorkbook.Name 
    FileNAME = Left(FileNAME, Len(FileNAME) - 4) ' REMOVE XLS EXTENSION 
    'FileNAME = FileNAME & "csv" ' ADD CSV EXTENSION 
    FileNAME = "data.csv" ' any name can be set here 
    Application.DisplayAlerts = False ' REMOVE DISPLAY MESSAGE: PREVIOUS FILE WILL BE ERASED 
    ActiveWorkbook.SaveAs FileNAME:= _ 
     MyPATH & "\" & FileNAME, FileFormat:=xlCSV, _ 
     CreateBackup:=False 

    ' 
    OldPath = CurDir 
    ' 
    ' Call ChangeCurrentDir(ActiveWorkbook.path, stat) 
    RetVal = Shell(FilePath, vbNormalFocus) 
    'Call ChangeCurrentDir(OldPath, stat) 
    'ActiveWindow.Close 
    'Application.DisplayAlerts = True ' Restore DISPLAY MESSAGE 
End Sub 

错误:

enter image description here

+8

不要链接到代码,粘贴**这里**。 –

+0

尝试在调用Shell之前添加'ActiveWorkbook.Close(False)'。最有可能的Excel有它打开专门 –

+0

@ Nick.McDermaid我认为这不会工作,因为宏从ActiveWorkbook运行,并将关闭后,他可以运行shell之前立即取消。 –

回答

0

也许最稳定的溶液会被修改dvnjackup.exe所以需要所期望的数据文件作为参数的完整绝对文件名。然后,您可以在Shell()呼叫中传递此路径。

RetVal = Shell("""C:\dvnjackup.exe"" ""C:\Full\Path to\data.csv""", vbNormalFocus) 

注意,我逃使用引号两个路径(字符串字面""给你的结果")。

如果您不能修改dvnjackup.exe,您可以尝试明确设置工作目录。但是你似乎没有注意到这样做的一些代码(参见ChangeCurrentDir调用)。

不管怎么说,你可以改变当前的工作目录是这样的:

ChDir "C:\Path\To New Working\Directory" 
' No need to enclose paths containing spaces here 

希望这有助于! :)