VBA-Code funktioniert in einem Blatt und gibt einen benutzerdefinierten Typ zurück, der in einem anderen nicht definiert ist

VBA-Code funktioniert in einem Blatt und gibt einen benutzerdefinierten Typ zurück, der in einem anderen nicht definiert ist

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.

verwandte Informationen