【发布时间】: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。
-
如果这是问题的解决方案,那么我想它需要从不同的工作簿运行。