В excel Я пытаюсь вставить кнопку, чтобы проанализировать содержимое выбранных ячеек на новое электронное письмо. Поскольку я использую Mozilla Thunderbird, мне приходится разбираться через Shell. Мой код до сих пор:Запустить приложение из оболочки VBA
Dim dr As String
If dir("C:\Program Files (x64)", vbDirectory) = "" Then
dr = "C:\Program Files (x86)"
Else
dr = "C:\Program Files"
End If
dr = dr & "\Mozilla Thunderbird\thunderbird.exe"
Dim args As String
args = "to='" & MailTo & "',cc='" & MailCC & "',bcc='" & MailBCC & "'"
args = args & ",subject='" & MailSubject & "',body='" & strbody & "'"
If MailBijlage <> "" Then args = args & ",attachment='" & TempFilePath & TempFileName & ".pdf"
Dim Command As String
Command = "cmd.exe /S /K " & """" & dr & """" & " -compose " & """" & args & """"
conf = MsgBox(Command, vbOKCancel, "Confirm command")
If conf = vbOK Then
Shell (Command)
MsgBox "Email sent.", , "Info"
ElseIf conf = vbCancel Then
MsgBox "Canceled.", , "Info"
End If
Создание команды обрабатывается хорошо, но Shell не запускается Thunderbird. Он просто говорит:
«C: \ Program» не распознается как внутренней или внешней командой, программы или действие т пакетного файла.
Я не знаю, что не так, в окне сообщения, показывающем код, четко отображаются двойные кавычки вокруг пути.
Заранее спасибо.
== EDIT ==
Попытки заставить его работать, используя пакетный файл сейчас (как это было предложено SO) ... я открыл битый файл (который создается), и пусть выходные команды VBA к летучая мышь-файл. Когда я добираюсь до точки msgbox с просьбой отправить почту, когда я открываю bat-файл в блокноте, он пуст. VBA вызывает пустой пакетный файл, и ничего не происходит (почта не была отправлена). Когда я снова открываю файл после завершения макроса, весь вывод находится в пакетном файле, и когда я его запускаю, почта складывается так, как должна.
Open Environ("userprofile") & "\desktop\tbmail.bat" For Output As #1
If dir("C:\Program Files (x64)", vbDirectory) = "" Then
Print #1, "cd ""%programfiles(x86)%"""
Else
Print #1, "cd ""%programfiles%"""
End If
Print #1, "cd ""Mozilla Thunderbird"""
Print #1, "thunderbird.exe -compose """ & args & """"
Close #1
If conf = vbOK Then
Call Shell(Environ("userprofile") & "\desktop\tbmail.bat")
MsgBox "De mail is verstuurd.", , "Informatie"
ElseIf conf = vbCancel Then
MsgBox "Versturen geannuleerd.", , "Informatie"
End If
Что случилось?
Не могли бы вы предоставить данные, хранящиеся в переменной с именем «Команда»? Также, когда вы делаете Shell, вам не нужен CMD.EXE или нет? Смотрите: http: //stackoverflow.com/questions/2290365/how-can-i-execute-a-shell-command-using-vba – NoChance
Я сделал. Переменная dr создается сначала и дает абсолютный путь к приложению Thunderbird (thunderbird.exe), а args содержит все аргументы, которые необходимо добавить для создания почты из командной строки. Не вызывать cmd.exe в Shell(), не имеет значения? – Cordin90