从 Excel 执行 .exe 文件

Posted

技术标签:

【中文标题】从 Excel 执行 .exe 文件【英文标题】:Execute a .exe file from Excel 【发布时间】:2017-05-08 12:53:36 【问题描述】:

我正在尝试创建一个启用宏的 Excel 文件,在该文件中,点击按钮后,Excel 将保存到 data.csv 到同一文件夹中,并且将调用 .exe 文件(这又在同一个文件夹中)文件夹),它将访问 data.csv 以获取其输入。

我准备了这个,它创建了.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

错误:

【问题讨论】:

不要链接到代码,把它粘贴到这里 在拨打Shell之前尝试添加ActiveWorkbook.Close (False)。 excel 很可能是专门打开的 @Nick.McDermaid 我认为这行不通,因为宏是从 ActiveWorkbook 运行的,并且会在关闭后立即取消,然后才能运行 shell。 如果这是问题的解决方案,那么我想它需要从不同的工作簿运行。 How to use VBA SaveAs without closing calling workbook?的可能重复 【参考方案1】:

可能最稳定的解决方案是修改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

希望这会有所帮助! :)

【讨论】:

以上是关于从 Excel 执行 .exe 文件的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL文档可以做成EXE可执行文件吗?

Pyinstaller - “致命错误!将脚本转换为 exe 时无法执行脚本”

Pyinstaller 可执行文件不起作用

是否可以从 Python 可执行文件访问启动快捷方式目录?

Python利用pyinstaller工具将py文件打包成.exe可执行文件

exe格式的电子书打开后一直显示loading