2015-01-24 4 views
0

В 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 

Что случилось?

+0

Не могли бы вы предоставить данные, хранящиеся в переменной с именем «Команда»? Также, когда вы делаете Shell, вам не нужен CMD.EXE или нет? Смотрите: http: //stackoverflow.com/questions/2290365/how-can-i-execute-a-shell-command-using-vba – NoChance

+0

Я сделал. Переменная dr создается сначала и дает абсолютный путь к приложению Thunderbird (thunderbird.exe), а args содержит все аргументы, которые необходимо добавить для создания почты из командной строки. Не вызывать cmd.exe в Shell(), не имеет значения? – Cordin90

ответ

0

Попробуйте изменить cmd.exe только CMD

Если он все еще не работает, вы можете попробовать попробовать:

CreateObject("WScript.Shell").Run Command, 1, False 

Изменение 1 к 0, если вы хотите, чтобы скрыть консоль, Изменить НЕВЕРНО значение True если вы хотите, чтобы ожидание возврата пользователя в консоли.

Или вы могли так что-то вроде:

Open Environ("USERPROFILE") & "\desktop\test.bat" For Output As #1 
Print #1, Command 
Close #1 
Shell Environ("USERPROFILE") & "\desktop\test.bat" 
Kill Environ("USERPROFILE") & "\desktop\test.bat" 

который записывает команду в пакетный файл и с помощью команды Shell для вызова пакетного файла.

Я обычно предпочитаю использовать объект WScript.Shell, потому что он позволяет такие вещи, как чтение StdOut, что очень полезно.

+0

cmd.exe или CMD не имеет значения, по-прежнему такая же ошибка. В CreateObject также указанная ошибка. Это как если бы код, переданный в cmd, игнорировал двойные кавычки. – Cordin90

Смежные вопросы