首页 > 解决方案 > 从相邻单元格细节动态改变 CC 场

问题描述

我在当前正在工作的 excel 工作簿中有一段 VBA 代码,但是当尝试向 VBA 添加其他功能时,代码返回错误。

背景:单击按钮时,如果 U 列包含值“Y”,则会发送一封电子邮件,其中包含电子邮件主题和正文中的客户名称(W 列)。我想添加客户经理的电子邮件地址(第五列),以便每发送一封电子邮件都会更改。

我知道 Rng 是在过程级范围内,并且它只对 notify() 可见,所以我的目标是预先定义它,然后将它“调用”到 mymacro()。我试图添加一个额外的 Sub,但没有奏效。

尝试过使用 2 个 if 语句(如下所示),但也不认为这在正确的轨道上。

我认为问题可能与我错误地定义范围有关?或者可能错误地定义了“EmailAddr”?

    Sub notify()
      Dim Rng As Range
      Dim EmailAddr As String

       For Each Rng In Range("U3:W200")
         If (Rng.Value = "Y") Then
           mymacro theValue:=Rng.Offset(0, 2).Value
         End If
   
         If (Rng.Value = "Y") Then
           mymacro EmailAddr = Rng.Offset(0, 1).Value
         End If
   
      Next Rng
    End Sub

    Private Sub mymacro(theValue As String, EmailAddr As String)
      Dim xOutApp As Object
      Dim xOutMail As Object
      Dim xMailBody As String

      Set xOutApp = CreateObject("Outlook.Application")
      Set xOutMail = xOutApp.CreateItem(0)
      xMailBody = "Hi All" & vbNewLine & vbNewLine & _
                  "This alert has been created via the Compliance Register." & vbNewLine & vbNewLine & _
                  "Please review the insurance(s) for " & theValue & " that are due to expire in the next 30 days." & vbNewLine & vbNewLine

      With xOutMail
           .To = "generalmanager@gmail.com;financemanager@gmail.com"
           .CC = EmailAddr
           .BCC = ""
           .Subject = "Insurance(s) for " & theValue & " are expiring soon."
           .Body = xMailBody
           .Display   'or use .Send
     End With

     On Error GoTo 0
     Set xOutMail = Nothing
     Set xOutApp = Nothing
   End Sub

如果从 notify() 和 mymacro() 中删除所有“EmailAddr”组件,该代码将完美运行 - 但是,当然,CC 组件留空。在直观地更改代码以满足我的需要方面,我仍然是新手,所以朝着正确的方向前进会很棒。

让我知道我是否可以在此期间澄清任何事情。

标签: excelvbaoutlook

解决方案


你只需要一个循环;改变

If (Rng.Value = "Y") Then
    mymacro theValue:=Rng.Offset(0, 2).Value
End If

If (Rng.Value = "Y") Then
   mymacro EmailAddr = Rng.Offset(0, 1)
End If

If (Rng.Value = "Y") Then
   mymacro theValue:=Rng.Offset(0, 2).Value, EmailAddr:=Rng.Offset(0, 1)
End If

并删除Dim EmailAddr As String,因为它是 的命名参数mymacro,而不是局部变量。


推荐阅读