나는 꽤 많은 시간을 절약할 수 있는 몇 가지 코드를 작업 중입니다. 동일한 품목에 대한 견적을 받기 위해 공급업체에 여러 개의 이메일 초안을 작성하는 것을 의미합니다.
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 개체 라이브러리 활성화입니다.
이제 의도한 대로 작동합니다.