我正在编写一些可以节省我很多时间的代码。它旨在起草几封电子邮件给供应商,以获取同一产品的报价。
Sheet1 我有供应商数据;名称、电子邮件和一些标记,用于标记我是否要向该供应商发送请求。Sheet2 我有所需报价的详细信息。更有趣的是,它可以在一张工作表中工作,我在其中测试/改进了它,但不是在其主表中。我甚至尝试将信息复制到新工作表中,但出现了同样的错误;我不知道为什么。
Public Sub RequestShippingQuote()
Dim objOutlook As Outlook.Application
Dim objMail As Outlook.MailItem
Dim lCounter As Long
Set objOutlook = Outlook.Application 'Set Objects
Dim OutAccount As Outlook.Account
Set OutAccount = objOutlook.Session.Accounts.Item(4)
Dim mymsg As String
For lCounter = 2 To 100
If IsEmpty(Sheet1.Range("C" & lCounter).Value) = True Then 'Email if False
Else
Set objMail = objOutlook.CreateItem(olMailItem)
objMail.To = Sheet1.Range("C" & lCounter).Value 'To
objMail.Subject = "Quote Request" 'Subject
mymsg = "Hello," & vbCrLf
mymsg = mymsg & "Please provide freight quote for the following:" & vbCrLf
mymsg = mymsg & "Commodity: " & Sheet2.Range("B7").Value & vbCrLf
mymsg = mymsg & "" & Sheet2.Range("B9").Value & " info is as follows:" & vbCrLf
mymsg = mymsg & "" & Sheet2.Range("B13").Value & " " & Sheet2.Range("B9").Value & vbCrLf
mymsg = mymsg & " " & Sheet2.Range("B18").Value & " W x " & Sheet2.Range("B19").Value & " L x " & Sheet2.Range("B20").Value & " H x " & vbCrLf
mymsg = mymsg & " " & Sheet2.Range("B15").Value & " lbs" & vbCrLf
mymsg = mymsg & "From: " & vbNewLine & Sheet2.Range("B26").Value & vbCrLf
mymsg = mymsg & "" & Sheet2.Range("B28").Value & vbCrLf & vbCrLf
mymsg = mymsg & "" & Sheet2.Range("B30").Value & vbCrLf
mymsg = mymsg & "" & Sheet2.Range("B32").Value & vbCrLf
mymsg = mymsg & "" & Sheet2.Range("B34").Value & vbCrLf & vbCrLf
mymsg = mymsg & "Pickup Hours: " & Sheet2.Range("B36").Value & vbCrLf & vbCrLf
mymsg = mymsg & "Notes:" & vbNewLine & Sheet2.Range("B38").Value & vbCrLf
mymsg = mymsg & "To:" & vbNewLine & Sheet2.Range("B41").Value & vbCrLf
mymsg = mymsg & "" & Sheet2.Range("B43").Value & vbCrLf
mymsg = mymsg & "Notes: " & vbNewLine & Sheet2.Range("B53").Value & vbNewLine & Sheet2.Range("B54").Value 'Email Body
objMail.Body = mymsg
'objMail.Close (olSave) 'Draft Email
objMail.Display 'Display Email
Set objMail = Nothing 'Close the object
End If
Next 'May need to be in the if statement, not sure
MsgBox "Done", vbInformation
End Sub
当我尝试运行此代码时,出现“编译错误:未定义用户定义类型”。
我非常感谢您的帮助。
答案1
如果您启用了 OPTION EXPLICIT,您的 VBA 将会通知您无法声明诸如“olMailItem”之类的变量。
当我发现这个的时候我停了下来,其他未声明的变量可能也存在。
答案2
我发现了为什么它在一张纸上按预期工作但在另一张纸上却不工作。
在我测试的一张工作表上,我有一个库处于活动状态,但在我尝试开发该库的工作表上却没有处于活动状态。我不知道每张工作表都需要单独激活库,我以为这是一个全局设置。
答案,工具 > 参考 > 激活 Microsoft Outlook xx.x 对象库
现在可以按预期工作。