2017-05-08 307 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 

希望這有助於! :)