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 对象库

现在可以按预期工作。

相关内容