Поэтому я создал файл.exe(tlsolver.exe) для запуска с использованием VBA (TLSolver.xlsm). Когда я запускаю.exe, он запускает некоторые вычисления, выплевывает файл csv, а затем я использую VBA для копирования этих данных на лист excel.
Это код VBA, который я использую:
Public Sub StartExeWithArgument()
Dim strProgramName As String
ActiveWorkbook.Save
strProgramName = "C:\Users\My.Name\Desktop\Python\Tagless\tlsolver.exe"
Call Shell("""" & strProgramName & """", vbNormalFocus)
End Sub
Когда я запускаю макрос, окно консоли появляется, как следует, а затем быстро закрывается. Мне удалось увидеть эту ошибку до ее закрытия:
IOError: [Errno 2] No such file or directory: 'TLSolver.xlsm'
Я знаю, что.exe отлично работает, когда я дважды нажимаю на файл, поэтому я склонен думать, что я ввязываюсь в что-то глупое в VBA.
Любая помощь ценится!
Редактирование: я знаю, что sub помечено как StartExeWithArgument, но аргумента не требуется, просто нажмите и запустите.
Команда оболочки выполняется правильно. exe
запускает, а затем ищет файл .xlsm
в текущем пути. Что происходит, так это то, что он не может найти TLSolver.xlsm
в текущем каталоге и, следовательно, ошибку IOError: [Errno 2] No such file or directory: 'TLSolver.xlsm'
Три предложения в этом случае.
Измените каталог в VBA с помощью ChDir
в каталог, в котором находится файл excel, а затем запустите exe OR
Поместите оба файла в один и тот же каталог. ИЛИ
Перепишите код exe python (это выходит из моего опыта, поэтому не может помочь вам здесь), чтобы предложить пользователю выбрать файл excel.
ЧАСТЬ VBA (предложение 1)
Public Sub StartExeWithArgument()
Dim strProgramName As String
Dim xlFilePath As String
'~~> Path of the excel file. Change as applicable
xlFilePath = "C:\Temp"
ActiveWorkbook.Save
'~~> Change directory
ChDir xlFilePath
strProgramName = "C:\Users\My.Name\Desktop\Python\Tagless\tlsolver.exe"
Call Shell("""" & strProgramName & """", vbNormalFocus)
End Sub
No such file or directory: 'TLSolver.xlsm'
почему.xlsm
? Разве это не должно быть.exe
?