VBA中的循环错误

时间:2018-02-11 22:42:15

标签: vba excel-vba-mac

如何避免'调试'我当前的VBA脚本中的错误?我已经创建了以下自动脚本,我自动获取特定单元格中列出的供应商电子邮件地址并发送电子邮件。但是,有时它会在找不到电子邮件地址时显示调试错误,甚至在单元格中列出它。

我已经使用了" 间接"函数以避免此单元格中的值不正确。有人可以建议我一种方法来避免调试错误,如果找不到电子邮件,它会转到下一个吗?

错误行为:With ActiveSheet.MailEnvelope .Introduction = "Body of an email" .Item.To = Range("A5").Value,当Range("A5").Value #N/A 时发生。

当前脚本(仅限部分)如下:

ActiveWorkbook.EnvelopeVisible = True

        With ActiveSheet.MailEnvelope ' <-- ERROR LINE

          .Introduction = "Body of an email"
          .Item.To = Range("A5").Value ' <-- ERROR WHEN IT's "#N/A"
          .Item.Subject = "subject"
          .Item.SentOnBehalfOfName = "inquiry@company.com"
          .Item.send

        End With

1 个答案:

答案 0 :(得分:0)

这里似乎有两个错误。

WRT到第一个错误(With ActiveSheet.MailEnvelope),因为你没有提供任何进一步的细节(比如计算机报告的错误!!),几乎不可能帮助你(除非你的期望)是因为互联网上的随机陌生人会在白天或晚上的任何奇怪时间到您的家中或工作地点看你的电脑。

WRT到第二个错误,即使您没有包含有关错误本身的任何进一步细节,您似乎已经确定了它出现的条件。这是一个很好的第一步(尽管如果您包含确切的错误消息,它将非常有用)。但是,让我们看看我们可以用这个做些什么。

我无法找到确认此内容的官方文档,但我猜测Item属性可以从Office Outlook类型库中保存MailItem类型的对象。 MailItem 有一个To property,需要String - 一系列字符:

但是,当单元格包含#N/A时,Value属性返回的值是Error对象,不适合String。< / p>

您可以使用String函数检查单元格值是Error还是Typename

' Cell A1 has an email; cell A2 has #N/A in it

' prints abc@example.com
Debug.Print activesheet.Range("a1").Value

' prints String
Debug.Print TypeName(activesheet.Range("a1").Value)

' prints Error 2042
Debug.Print activesheet.Range("a2").Value

' prints Error
Debug.Print TypeName(activesheet.Range("a2").Value)

您可以检查该单元格是否有实际的电子邮件地址,然后才生成电子邮件:

If TypeName(Range("A5").Value) = "String" Then

    With ActiveSheet.MailEnvelope
      .Introduction = "Body of an email"
      .Item.To = Range("A5").Value
      .Item.Subject = "subject"
      .Item.SentOnBehalfOfName = "inquiry@company.com"
      .Item.send
    End With

End If