在excel中,我试图插入一个按钮来将所选单元格的内容解析为新的电子邮件。由于我使用Mozilla Thunderbird,我必须通过Shell解析。 到目前为止我的代码:
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。它只是说:
&#39; C:\程序&#39;不被视为内部或外部命令, 可操作程序或批处理文件。
我不知道错误,显示代码的消息框清楚地显示了路径旁边的双引号。
提前致谢。
== EDIT ==
现在尝试使用批处理文件(正如S O所示)... 我打开了一个bat文件(已创建)并让VBA输出命令到bat文件。 当我到达要求发送邮件的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 :(得分:0)
尝试将cmd.exe
更改为CMD
如果仍然无效,您可以尝试尝试:
CreateObject("WScript.Shell").Run Command, 1, False
如果要隐藏控制台,请将1更改为0, 如果要在控制台中等待用户返回,请将False更改为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等非常有用的内容。