私は、かなりの時間を節約できるコードを作成中です。これは、ベンダーに同じ品目の見積もりを依頼するための複数の電子メールを作成するためのものです。
シート 1 には、ベンダー データ (名前、電子メール、およびベンダーにリクエストを送信するかどうかを示すマーク) があります。シート 2 には、必要な見積もりの詳細があります。これのさらに興味深い点は、テスト/改良した 1 つのワークシートでは機能するが、ホーム シートでは機能しないことです。情報を新しいシートにコピーしようとしましたが、同じエラーが発生します。原因はわかりません。
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
あるシートでは意図したとおりに動作するのに、他のシートでは動作しない理由がわかりました。
私がテストした 1 つのシートでは、これを開発しようとしていたシートではアクティブではなかったライブラリがアクティブになっていました。各シートで他のシートとは別にライブラリをアクティブにする必要があることに気付かず、それがグローバル設定だと思っていました。
答えは、ツール > 参照 > Microsoft Outlook xx.x オブジェクト ライブラリのアクティブ化です。
今は意図したとおりに動作します。