我正在編寫一些程式碼,這將節省我相當多的時間。它的目的是起草幾封發給供應商的電子郵件,以獲得同一商品的報價。
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 物件庫
現在按預期工作。