Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何制作一个条件语句,将几个公共常量之一添加到我的电子邮件中_Excel_Vba_Outlook - Fatal编程技术网

Excel 如何制作一个条件语句,将几个公共常量之一添加到我的电子邮件中

Excel 如何制作一个条件语句,将几个公共常量之一添加到我的电子邮件中,excel,vba,outlook,Excel,Vba,Outlook,我正在尝试制作一个vba编码的电子表格,根据单元格是否具有特定值,它将为该人的电子邮件提取信息。如果有人能帮我看看我做错了什么,那就太好了。非常感谢。请理解,我已经更改了密码和人们的电子邮件地址,以防止信息泄露。多谢各位 Public Const TYemail As String = "Email Address" Public Const AWemail As String = "Email Address" Public Const MMemail As String = "Email A

我正在尝试制作一个vba编码的电子表格,根据单元格是否具有特定值,它将为该人的电子邮件提取信息。如果有人能帮我看看我做错了什么,那就太好了。非常感谢。请理解,我已经更改了密码和人们的电子邮件地址,以防止信息泄露。多谢各位

Public Const TYemail As String = "Email Address"
Public Const AWemail As String = "Email Address"
Public Const MMemail As String = "Email Address"
Public Const DRemail As String = "Email Address"
Public Const MNemail As String = "Email Address"


Sub DoStuff()

    'Workbooks("Reoair or Rework Process Request.xlsm").Activate

    'ActiveWorkbook.Sheets("PM Sheet").Select
    'Range("C9").Value = "Sent to Eng - "
    'Range("D30").Value = RequestNo

    path = Application.ActiveWorkbook.FullName

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .TO = programemail
        .CC = ""
        .BCC = ""
        .Subject = "Repair or Rework Request"
        .htmlBody = "Repair request has been written for " & PN & " " & WO & " See: " & "<a href=""" & path & """>Here</a>"
        'You can add other files also like this
        '.Attachments.Add ("C:\test.txt")
        '.Send
        'or use
        .Display
        '.send
    End With


    'End If

    ' Sheets("Page 1").Select
    ' ActiveSheet.Unprotect "Password"
    ' Range     ("F36:G36,D10:J10,D11:J11,D12:J13,D14:J14,D15:J15,A18:J35,B36:D36,F36:G36" _
    '     ).Select
    '  Selection.Locked = False
    '  Selection.FormulaHidden = False
    '  Sheets("Page 1").Select
    '   ActiveSheet.Protect "Password"

    '  Sheets("Page 2(If Nec)").Select
    '  ActiveSheet.Unprotect "Password"
    '  Range      ("F36:G36,D10:J10,D11:J11,D12:J13,D14:J14,D15:J15,A18:J35,B36:D36,F36:G36" _
    '     ).Select
    '  Selection.Locked = False
    '  Selection.FormulaHidden = False
    '   Sheets("Page 2(If Nec)").Select
    '   ActiveSheet.Protect "Password"

    '  Sheets("Page 1").Select


    Sheets("Sheet1").Range("F2, V2, AC2, H6, H8, H10, H14, H14").Locked = True

    Sheets("QE Sheet").Range("C10").value = Date


    ' Call DisableButtons


    Sheets("Sheet1").Protect "Password"

    Sheets("QE Sheet").Protect "Password"
    Sheets("QE Sheet").Visible = xlHidden


    'ActiveWorkbook.Save
    'Application.ScreenUpdating = True
    'ActiveWorkbook.Close

End Sub

下面是我将如何替换您创建的
EmailProgramManager
sub。它更容易阅读,而且速度稍快,即使它没有重复调用单元格来获取其值:)也不必仅为了获取工作簿中单元格的值而取消对工作簿的保护,因此我删除了您拥有的部分

Sub EmailProgramManager()

    Select Case Sheets("PM Sheet").Range("V6").Value2
        Case "person 1"
            Set ProgramEmail = MNemail
        Case "person 2"
            Set ProgramEmail = TYemail

        '... more cases ...

        Case Else
            Set ProgramEmail = ""
    End Select

End Sub

但实际上,我可能会重新思考处理这整套函数的方式。我不认为电子邮件地址设置器真的应该与全局变量混在一起,而是应该传递一个包含程序管理器的范围,然后以字符串形式返回它们的电子邮件地址

下面是一个快速示例,说明如何更改这两个选项,使其更符合逻辑:

Option Explicit

Sub DoStuff()

    '... preceding code ...

    Dim i
    For i = 4 To 6  'based on the range used to decide how many emails to send

        Set OutMail = OutApp.CreateItem(0)

        With OutMail
            .To = EmailProgramManager(Range("V" & i))
            .CC = ""
            .BCC = ""
            .Subject = "Repair or Rework Request"
            .htmlBody = "Repair request has been written for " & PN & " " & WO & " See: " & "<a href=""" & path & """>Here</a>"
            .Display
        End With

        Set OutMail = Nothing

    Next i

    '... following code

End Sub

Function EmailProgramManager(ByVal rng As Range) As String

    Select Case Sheets("PM Sheet").rng.Value2
        Case "person 1"
            EmailProgramManager = "email 1"
        Case "person 2"
            EmailProgramManager = "email 2"

        '... more cases ...

        Case Else
            EmailProgramManager = ""
    End Select

End Function
选项显式
子DoStuff()
'... 前面的代码。。。
昏暗的我
对于i=4到6’,根据用于决定发送多少电子邮件的范围
Set-OutMail=OutApp.CreateItem(0)
发邮件
.To=EmailProgramManager(范围(“V”和i))
.CC=“”
.BCC=“”
.Subject=“修理或返工请求”
.htmlBody=“已为”&PN&“&WO&”编写维修请求,请参见:“&”
.展示
以
发送邮件=无
接下来我
'... 以下代码
端接头
函数EmailProgramManager(ByVal rng作为范围)作为字符串
选择案例表(“PM表”)。rng.Value2
案例“第1人”
EmailProgramManager=“电子邮件1”
案例“第二人”
EmailProgramManager=“电子邮件2”
'... 更多案例。。。
其他情况
EmailProgramManager=“”
结束选择
端函数

立即将其复制并粘贴到我的IDE中,我发现
ElseIf Sheets(“Sheet1”).Range(“V6”).Value=this Person“中有一个输入错误,然后设置programemail=AWemail
。应该有“此人”的起始引号“`但通读它,我想这只是因为你为了匿名而更新了它。让我推荐下面的
Select Case
语句,那么我该如何在电子邮件中调用它呢?使用EmailProgramManager对邮件应该发送给谁有用吗?现在它告诉我,这个论点不是optional@Stacie好的,要使用第二个,您还必须对
DoStuff
子例程进行一些更改。我正在做一个编辑,向您展示如何进行编辑。@Stacie好的,下面是我尝试将您所做的调整为一种不同的方法,以便它可以根据例如
V4:V6
一次生成多封电子邮件。这对你来说可能并不完美,因为可视化你的数据有点困难,但我仍然认为值得包括在内。只是为了让你理解,我拿着这张表,按下一个按钮将向正确的人发送一封电子邮件,具体取决于涉及的人。
Option Explicit

Sub DoStuff()

    '... preceding code ...

    Dim i
    For i = 4 To 6  'based on the range used to decide how many emails to send

        Set OutMail = OutApp.CreateItem(0)

        With OutMail
            .To = EmailProgramManager(Range("V" & i))
            .CC = ""
            .BCC = ""
            .Subject = "Repair or Rework Request"
            .htmlBody = "Repair request has been written for " & PN & " " & WO & " See: " & "<a href=""" & path & """>Here</a>"
            .Display
        End With

        Set OutMail = Nothing

    Next i

    '... following code

End Sub

Function EmailProgramManager(ByVal rng As Range) As String

    Select Case Sheets("PM Sheet").rng.Value2
        Case "person 1"
            EmailProgramManager = "email 1"
        Case "person 2"
            EmailProgramManager = "email 2"

        '... more cases ...

        Case Else
            EmailProgramManager = ""
    End Select

End Function