Excel 如何制作一个条件语句,将几个公共常量之一添加到我的电子邮件中
我正在尝试制作一个vba编码的电子表格,根据单元格是否具有特定值,它将为该人的电子邮件提取信息。如果有人能帮我看看我做错了什么,那就太好了。非常感谢。请理解,我已经更改了密码和人们的电子邮件地址,以防止信息泄露。多谢各位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
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