VBA 代碼在一張紙上工作並傳回未在另一張紙上定義的使用者定義類型

VBA 代碼在一張紙上工作並傳回未在另一張紙上定義的使用者定義類型

我正在編寫一些程式碼,這將節省我相當多的時間。它的目的是起草幾封發給供應商的電子郵件,以獲得同一商品的報價。

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 物件庫

現在按預期工作。

相關內容