我正在尝试抓取选定的Outlook邮件,将其作为html保存到磁盘并运行其他应用程序。
虽然电子邮件已保存,但我正在努力运行其他应用程序。有一个“编译错误:需要对象”。
Public Sub maile()
Dim oMail As Outlook.MailItem
Dim objItem As Object
Dim sPath As String
Dim dtDate As Date
Dim sName As String
Dim enviro As String
Dim objShell As String
enviro = CStr(Environ("USERPROFILE"))
For Each objItem In ActiveExplorer.Selection
If objItem.MessageClass = "IPM.Note" Then
Set oMail = objItem
sName = oMail.Subject
ReplaceCharsForFileName sName, "-"
dtDate = oMail.ReceivedTime
sName = Format(dtDate, "yyyymmdd", vbUseSystemDayOfWeek, _
vbUseSystem) & Format(dtDate, "-hhnnss", _
vbUseSystemDayOfWeek, vbUseSystem) & "-" & sName & ".html"
sPath = "c:\maile\"
Debug.Print sPath & sName
oMail.SaveAs sPath & sName, olHTML
End If
strProgramPath = "C:\Pedro\dist\Pedro\Pedro.exe"
Set objShell = CreateObject("WScript.Shell")
objShell.Run strProgramPath
Next
End Sub
Private Sub ReplaceCharsForFileName(sName As String, sChr As String)
sName = Replace(sName, "'", sChr)
sName = Replace(sName, "*", sChr)
sName = Replace(sName, "/", sChr)
sName = Replace(sName, "\", sChr)
sName = Replace(sName, ":", sChr)
sName = Replace(sName, "?", sChr)
sName = Replace(sName, Chr(34), sChr)
sName = Replace(sName, "<", sChr)
sName = Replace(sName, ">", sChr)
sName = Replace(sName, "|", sChr)
End Sub
答案 0 :(得分:1)
如果你是新手,可以对编码进行一些介绍。类型理论(确保在任何一天都能了解更多信息,这是一个很棒的主题!):代码中的 thing 有一个描述它们的类型。比如,他们可以做什么样的事情以及他们可以拥有什么样的数据。类型通常分为值类型和引用类型。值是本机简单的东西,如数字或字符串,它们安全,简单,高效和美观。参考文献相当复杂,你可以搞定它们,但是它们非常强大和灵活,你们基本上都喜欢它们,就像那些着名的 Objects 一般。
为什么这在您的代码中很重要?您基本上将 ValueType 视为 ReferenceType 。 VBA要求您通过
完成对 ReferenceType 的分配 Set ReferenceType = value
。
我的意思是,你被强制拼出Set
作业。同样, ValueTypes 不能与Set
分配。
你发生在哪里?一开始,你说
Dim objShell As String
这意味着您告诉VBA objShell
是String
,即 ValueType 。但后来你写了
Set objShell = CreateObject("WScript.Shell")
在Set
之后,VBA期待 ReferenceType 。这就是为什么它抱怨对象需要编译错误:)
所以,只是在开头说而不是
Dim objShell as Object
这就是CreateObject()
函数给你的方式,对象:)