Ich arbeite an einem Code, der mir einiges an Zeit sparen wird. Er ist dafür gedacht, mehrere E-Mails an Lieferanten zu verfassen, um ein Angebot für denselben Artikel einzuholen.
Auf Blatt 1 habe ich die Lieferantendaten: Name, E-Mail und etwas, das ich markieren kann, ob ich diesem Lieferanten eine Anfrage senden möchte oder nicht. Auf Blatt 2 habe ich die Details des erforderlichen Angebots. Das Interessantere daran ist, dass es in einem Arbeitsblatt funktioniert, in dem ich es getestet/verfeinert habe, aber nicht in seinem Hauptblatt. Ich habe sogar versucht, die Informationen auf ein neues Blatt zu kopieren, und ich habe denselben Fehler; und ich weiß nicht, warum.
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
Beim Versuch, diesen Code auszuführen, erhalte ich die Meldung „Kompilierungsfehler: Benutzerdefinierter Typ nicht definiert.“
Ich bin für jede Hilfe dankbar.
Antwort1
Wenn Sie OPTION EXPLICIT aktiviert hätten, würde Ihr VBA Sie über Ihre Fehler beim Deklarieren von Variablen wie „olMailItem“ benachrichtigen.
Als ich dies fand, habe ich aufgehört, es könnten auch andere nicht deklarierte Variablen existieren.
Antwort2
Ich habe herausgefunden, warum es auf einem Blatt wie vorgesehen funktioniert hat, auf einem anderen jedoch nicht.
Auf dem einen Blatt, auf dem ich es getestet habe, war eine Bibliothek aktiv, die auf dem Blatt, auf dem ich es entwickeln wollte, nicht aktiv war. Mir war nicht bewusst, dass die Bibliothek auf jedem Blatt unabhängig von den anderen aktiviert werden musste, ich dachte, das wäre eine globale Einstellung.
Die Antwort, Extras > Referenzen > Microsoft Outlook xx.x Objektbibliothek aktivieren
Funktioniert jetzt wie vorgesehen.